#! /usr/bin/env node
// @ts-check

const fs = require("fs");
const path = require("path");
const colors = require("./utils/console-colors");
const startProcess = require("./deploy/start");

///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////

const WORK_DIR = process.cwd();

///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////

try {
    const configText = fs.readFileSync(
        path.join(WORK_DIR, "nodecid.config.json"),
        "utf-8"
    );

    /** @type {NodeCIConfig} */
    const config = JSON.parse(configText);

    const { start, preflight, redeploy_path } = config;

    /** @type {string | undefined} */
    let redeployFile;

    if (!redeploy_path) {
        const defaultRedeployPath = path.join(WORK_DIR, "REDEPLOY");
        const checkExistingPath = fs.existsSync(defaultRedeployPath);

        if (!checkExistingPath) {
            fs.writeFileSync(
                defaultRedeployPath,
                Date.now().toString(),
                "utf-8"
            );
        }

        redeployFile = path.join(WORK_DIR, "REDEPLOY");
    } else {
        redeployFile = path.resolve(WORK_DIR, redeploy_path);
    }

    if (!redeployFile) throw new Error("Redeploy file not found!");

    startProcess({
        command: start,
        preflight,
        redeploy_file: redeployFile,
    });
} catch (error) {
    console.log(
        `${colors.FgRed}ERROR:${colors.Reset} CI process failed! => ${error.message}`
    );
}