import { XwebConfig, read_config } from "./config/config.js";
import { info, status } from "./log.js";
import { save_tagsets } from "./tagset/util.js";
import { run as run_create_config } from "./config/create.js";
import { confirm } from "./log.js";

import { ArgumentsCamelCase } from "yargs";
import path from "path";
import fs from "fs";

export default async function run(argv: ArgumentsCamelCase<{
    y: boolean;
}>) {
    let config: XwebConfig;
    let created_config = false;
    if (argv.yes || await confirm(argv, "Create 'xwebconfig.json' file?")) {
        created_config = true;
        const CONFIG_RESULT = await run_create_config(argv);
        if (CONFIG_RESULT == null) return;
        config = CONFIG_RESULT as XwebConfig;
        info("init/tags_folder", "Using tags folder from config file");
    } else {
        info("init/tags_folder", "Detecting tags folder based on config file or defaults");
        config = read_config("init/tags_folder");
    }

    if (argv.yes || await confirm(argv, `Create folder '${config.folder.tags}' for tags?`)) {
        const TAGS_FOLDER_PATH = path.join(process.cwd(), config.folder.tags);
        fs.mkdirSync(TAGS_FOLDER_PATH);
        status("init/tags_folder", `Created folder '${config.folder.tags}'`);
    }

    if (argv.yes || await confirm(argv, "Create '.xwebignore' file")) {
        const IGNORE_FILE_PATH = path.join(process.cwd(), ".xwebignore");
        fs.writeFileSync(IGNORE_FILE_PATH, "");
        status("init/ignores", "Created file '.xwebignore'");
    }

    if (created_config && config.tags.length > 0 && (argv.yes || await confirm(argv, "Fetch all tagsets from the public github repo?"))) {
        save_tagsets("init/fetch", config.tags, config);
    }
}