package utils

import (
	"errors"
	"io"
	"os"
	"path"
)

//@desc: 文件目录是否存在
//@param: path string
//@return: bool, error

func PathExists(path string) (bool, error) {
	fi, err := os.Stat(path)
	if err == nil {
		if fi.IsDir() {
			return true, nil
		}
		return false, errors.New("there is a file with the same name")
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

func ReadFileLimited(path string, maxRead int64) ([]byte, error) {
	f, e := os.Open(path)
	if e != nil {
		return nil, e
	}
	defer f.Close()
	return io.ReadAll(io.LimitReader(f, maxRead))
}

func FilterFileExtForDir(dir string, fileExt string) ([]string, error) {
	var result []string

	fis, err := os.ReadDir(dir)
	if err != nil {
		return nil, err
	}

	for _, fi := range fis {

		fullName := dir + "/" + fi.Name()
		if fi.IsDir() {
			temp, err := FilterFileExtForDir(fullName, fileExt)
			if err != nil {
				return result, err
			}
			result = append(result, temp...)
		} else {
			if path.Ext(fullName) == "."+fileExt {
				result = append(result, fullName)
			}
		}
	}

	return result, nil
}
