// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT

import fs from "fs-extra";
import path from "node:path";
import yargs from "yargs";
import { hideBin } from "yargs/helpers";

import { destinationDirectory, distDirectory, foundryconfigFile, name } from "./const.js";

/**
 * Get the data path of Foundry VTT based on what is configured in the {@link foundryconfigFile}.
 */
function getDataPath() {
    const config = fs.readJSONSync(foundryconfigFile);

    if (config?.dataPath) {
        if (!fs.existsSync(path.resolve(config.dataPath))) {
            throw new Error("User data path invalid, no Data directory found");
        }
        return path.resolve(config.dataPath);
    } else {
        throw new Error(`No user data path defined in ${foundryconfigFile}`);
    }
}
/**
 * Link the built package to the user data folder.
 * @param {boolean} clean Whether to remove the link instead of creating it
 */
async function linkPackage(clean) {
    if (!fs.existsSync(path.resolve("system.json"))) {
        throw new Error("Could not find system.json");
    }

    const linkDirectory = path.resolve(getDataPath(), "Data", destinationDirectory, name);

    if (clean) {
        console.log(`Removing link to built package at ${linkDirectory}.`);
        await fs.remove(linkDirectory);
    } else if (!fs.existsSync(linkDirectory)) {
        console.log(`Linking built package to ${linkDirectory}.`);
        await fs.ensureDir(path.resolve(linkDirectory, ".."));
        await fs.symlink(path.resolve(".", distDirectory), linkDirectory);
    }
}

const argv = yargs(hideBin(process.argv)).usage("Usage: $0").option("clean", {
    alias: "c",
    type: "boolean",
    default: false,
    description: "Remove the link instead of creating it",
}).argv;
const clean = argv.c;
await linkPackage(clean);