"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const config_1 = require("../../../../config");
const client_1 = require("../../../../client");
const command_helpers_1 = require("../../../../command-helpers");
const cost_1 = require("../../../../cost");
const HELP = `
${chalk_1.default.bold('graph indexer cost set variables')} [options] <deployment-id> <variables-json>

${chalk_1.default.dim('Options:')}

  -h, --help                    Show usage information
  -o, --output table|json|yaml  Choose the output format: table (default), JSON, or YAML
`;
module.exports = {
    name: 'variables',
    alias: [],
    description: 'Update cost model variables',
    run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
        const { print, parameters } = toolbox;
        const { h, help, merged, o, output } = parameters.options;
        const [deployment, variables] = command_helpers_1.fixParameters(parameters, { h, help, merged }) || [];
        const outputFormat = o || output || 'table';
        if (help || h) {
            print.info(HELP);
            return;
        }
        if (!['json', 'yaml', 'table'].includes(outputFormat)) {
            print.error(`Invalid output format "${outputFormat}"`);
            process.exitCode = 1;
            return;
        }
        try {
            command_helpers_1.validateDeploymentID(deployment, { all: false, global: false });
        }
        catch (error) {
            print.error(error.toString());
            process.exitCode = 1;
            return;
        }
        try {
            JSON.parse(variables);
        }
        catch (error) {
            print.error(`Variables are not valid JSON: ${variables}`);
            process.exitCode = 1;
            return;
        }
        const parsedVariables = JSON.parse(variables);
        if (typeof parsedVariables !== 'object' || Array.isArray(parsedVariables)) {
            print.error(`Variables must be a JSON object: ${variables}`);
            process.exitCode = 1;
            return;
        }
        const config = config_1.loadValidatedConfig();
        let costModel = cost_1.parseCostModel({
            deployment,
            model: null,
            variables,
        });
        try {
            const client = yield client_1.createIndexerManagementClient({ url: config.api });
            costModel = yield cost_1.setCostModel(client, costModel);
            cost_1.printCostModels(print, outputFormat, cost_1.parseDeploymentID(deployment), costModel, []);
        }
        catch (error) {
            print.error(error.toString());
        }
    }),
};
