const { red } = require('kleur')
const spawn = require('cross-spawn')
// const { detect } = require('detect-package-manager')
const PKG_OPTION = {
    npm: 'install',
    yarn: 'add',
    pnpm: 'add',
}

const getPkgManage = async () => {
    // const pkg = await detect()
    // return pkg
    return 'npm'
}

const installDeps = (pkgManager, packageList) => {
    const errorMessage = `Ocurrió un error instalando ${packageList}`
    let childProcess = []

    const installSingle = (pkgInstall) => () => {
        new Promise((resolve) => {
            try {
                childProcess = spawn(
                    pkgManager,
                    [PKG_OPTION[pkgManager], pkgInstall],
                    {
                        stdio: 'inherit',
                    }
                )

                childProcess.on('error', (e) => {
                    console.error(e)
                    console.error(red(errorMessage))
                    resolve()
                })

                childProcess.on('close', (code) => {
                    if (code === 0) {
                        resolve()
                    } else {
                        console.error(code)
                        console.error(red(errorMessage))
                    }
                })

                resolve()
            } catch (e) {
                console.error(e)
                console.error(red(errorMessage))
            }
        })
    }

    if (typeof packageList === 'string') {
        childProcess.push(installSingle(packageList))
    } else {
        for (const pkg of packageList) {
            childProcess.push(installSingle(pkg))
        }
    }

    const runInstall = () => {
        return Promise.all(childProcess.map((i) => i()))
    }
    return { runInstall }
}

module.exports = { getPkgManage, installDeps }
