import { spawnSync } from 'node:child_process';

import { parseArgs } from './lib.ts';
import { updateFirefoxAddons } from '././firefox.ts';
import { updateDocker, updateFlakeInputs, updateVuetorrent } from './misc.ts';


/* Constants */
const FLAKE = process.env.FLAKE;

if (!FLAKE) {
    console.error('Env var FLAKE not found');
    process.exit(1);
}

const args = parseArgs();

if (args['d'] || args['docker']) {
    console.log(updateDocker());
}

if (args['i'] || args['inputs']) {
    console.log(updateFlakeInputs());
}

if (args['f'] || args['firefox']) {
    console.log(updateFirefoxAddons());
}

if (args['v'] || args['vuetorrent']) {
    console.log(updateVuetorrent());
}

if (args['a'] || args['all']) {
    // Update this first because of nix run cmd
    const firefoxOutput = updateFirefoxAddons();

    console.log(firefoxOutput);


    const flakeOutput = updateFlakeInputs();

    console.log(flakeOutput);


    const dockerOutput = updateDocker();

    console.log(dockerOutput);


    const vuetorrentOutput = updateVuetorrent();

    console.log(vuetorrentOutput);


    spawnSync('nix-fast-build', ['-f', `${FLAKE}#nixFastChecks`], {
        shell: true,
        stdio: [process.stdin, process.stdout, process.stderr],
    });

    console.log([
        'chore: update flake.lock',
        `Flake Inputs:\n${flakeOutput}`,
        `Docker Images:\n${dockerOutput}`,
        `Firefox Addons:\n${firefoxOutput}`,
        `Misc Sources:\n${vuetorrentOutput}`,
    ].join('\n\n'));
}

spawnSync('alejandra', ['-q', FLAKE], { shell: true });