"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 get')} [options] all
${chalk_1.default.bold('graph indexer cost get')} [options] <deployment-id>

${chalk_1.default.bold('graph indexer cost get')} [options] model all
${chalk_1.default.bold('graph indexer cost get')} [options] model <deployment-id>

${chalk_1.default.bold('graph indexer cost get')} [options] variables all
${chalk_1.default.bold('graph indexer cost get')} [options] variables <deployment-id>

${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: 'get',
    alias: [],
    description: 'Get cost models and/or variables for one or all subgraphs',
    run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
        const { print, parameters } = toolbox;
        const { h, help, merged, o, output } = parameters.options;
        const [first, second] = 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;
        }
        const fields = ['model', 'variables'].includes(first)
            ? ['deployment', first]
            : ['deployment', 'model', 'variables'];
        const rawDeployment = ['model', 'variables'].includes(first) ? second : first;
        try {
            command_helpers_1.validateDeploymentID(rawDeployment, { all: true, global: false });
        }
        catch (error) {
            print.error(error.toString());
            process.exitCode = 1;
            return;
        }
        const config = config_1.loadValidatedConfig();
        const deployment = cost_1.parseDeploymentID(rawDeployment);
        // Create indexer API client
        const client = yield client_1.createIndexerManagementClient({ url: config.api });
        try {
            const costModelOrModels = deployment === 'all'
                ? yield cost_1.costModels(client)
                : yield cost_1.costModel(client, deployment);
            cost_1.printCostModels(print, outputFormat, deployment, costModelOrModels, fields);
        }
        catch (error) {
            print.error(error.toString());
            process.exitCode = 1;
        }
    }),
};
