// @ts-nocheck

const path = require("path")
const fs = require("fs")

export function removeIndex(ss: any) {
    const remove = (str: any) => {
        if (str.endsWith("/index")) {
            return str.slice(0, -6)
        }
        if (str.endsWith("index")) {
            return str.slice(0, -5)
        }
        return str ? str : "/"
    }
    let r = true
    let rr = ss
    while (r) {
        if (rr.endsWith("/index")) {
            rr = remove(rr)
        } else {
            r = false
        }
    }
    return rr ? rr : "/"
}

export function isIndexEnd(str: any) {
    return str.length == 1 && str.endsWith("/")
}

export function walkDir(
    filePath: any,
    exclude = ["node_modules", "^_", ".git", ".idea", ".gitignore", "client", ".txt$", ".test.js$", ".test.ts$"],
) {
    let files: any[] = []
    function Data(opts: any) {
        this.relativeDir = opts.relativeDir
        this.relativeFile = opts.relativeFile
        this.filename = opts.filename
        this.file = opts.file
        this.absoluteFile = opts.absoluteFile
        this.relativeFileNoExt = opts.relativeFileNoExt
        this.absoluteDir = opts.absoluteDir
    }
    function readDir(filePath, dirname = ".") {
        let res = fs.readdirSync(filePath)
        res.forEach(filename => {
            const filepath = path.resolve(filePath, filename)
            const stat = fs.statSync(filepath)
            const name = filepath.split(path.sep).slice(-1)[0]
            if (typeof exclude === "string" && new RegExp(exclude).test(name)) {
                return
            }
            if (Array.isArray(exclude)) {
                for (let i = 0; i < exclude.length; i++) {
                    const excludeItem = exclude[i]
                    if (new RegExp(excludeItem).test(name)) {
                        return
                    }
                }
            }
            if (!stat.isFile()) {
                readDir(filepath, dirname + path.sep + name)
            } else {
                const data = new Data({
                    relativeDir: dirname,
                    relativeFile: dirname + path.sep + path.parse(filepath).base,
                    relativeFileNoExt: dirname + path.sep + path.parse(filepath).name,
                    file: path.parse(filepath).base,
                    filename: path.parse(filepath).name,
                    absoluteFile: filepath,
                    absoluteDir: path.parse(filepath).dir,
                })
                files.push(data)
            }
        })
    }
    readDir(filePath)
    return files
}