#!/usr/bin/env node
const minimist = require('minimist');
const { resolve, join }  = require('node:path');
const { readFileSync, existsSync } = require('node:fs');
const { argv, exit, env, cwd } = require('node:process');

function printHelp() {
    const pkgData = readFileSync(resolve(__dirname, '..', 'package.json')).toString();
    const { name, version } = JSON.parse(pkgData);
    console.log(`${name} v${version}`);
}

const args = minimist(argv.slice(2), {
    boolean: ['verbose']
});

if (args._.length === 0) {
    printHelp();
    exit(1);
}

const scriptName = args._.shift();
const scriptPath = env.DEVELOP
    ? resolve(join(__dirname, '../dist/scripts', scriptName))
    : resolve(join(__dirname, '../scripts', scriptName));

if (!existsSync(`${scriptPath}.js`)) {
    console.error(`Error: command ${scriptName} not found.`);
    exit(1);
}

const workingDir = cwd();

try {
    Promise.resolve()
        .then(() => require(scriptPath).default(args, workingDir))
        .then(exitCode => exit(exitCode || 0))
        .catch(err => {
            console.error(err && err.stack);
            exit(99);
        });
} catch (err) {
    console.error(err.stack);
    exit(99);
}