const utils = require('./index');
const prompt = require('./prompt');

/**
 *
 * @param packageName
 * @param preMessage Message to show before the question
 */
async function promptInstallation(packageName, preMessage) {
    const packageManager = utils.getPackageManager();

    if (!packageManager) {
        utils.logger.error("Can't find package manager");
        process.exit(2);
    }

    if (preMessage) {
        preMessage();
    }

    // yarn uses 'add' command, rest npm and pnpm both use 'install'
    const commandToBeRun = `${packageManager} ${[packageManager === 'yarn' ? 'add' : 'install', '-D', packageName].join(' ')}`;
    const { colors } = utils;

    let installConfirm;

    try {
        installConfirm = await prompt({
            message: `[webpack-cli] Would you like to install '${colors.green(packageName)}' package? (That will run '${colors.green(
                commandToBeRun,
            )}') (${colors.yellow('Y/n')})`,
            defaultResponse: 'Y',
            stream: process.stderr,
        });
    } catch (error) {
        utils.logger.error(error);
        process.exit(2);
    }

    if (installConfirm) {
        try {
            await utils.runCommand(commandToBeRun);
        } catch (error) {
            utils.logger.error(error);
            process.exit(2);
        }

        return utils.packageExists(packageName);
    }

    process.exit(2);
}

module.exports = promptInstallation;
