"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 indexer_common_1 = require("@graphprotocol/indexer-common");
const rules_1 = require("../../../rules");
const HELP = `
${chalk_1.default.bold('graph indexer rules maybe')} [options] global
${chalk_1.default.bold('graph indexer rules maybe')} [options] <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: 'maybe',
    alias: [],
    description: 'Index a deployment based on rules',
    run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
        const { print, parameters } = toolbox;
        const { h, help, o, output } = parameters.options;
        const [deployment] = command_helpers_1.fixParameters(parameters, { h, help }) || [];
        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 config = config_1.loadValidatedConfig();
        try {
            command_helpers_1.validateDeploymentID(deployment, { all: false, global: true });
        }
        catch (error) {
            print.error(error.toString());
            process.exitCode = 1;
            return;
        }
        const inputRule = rules_1.parseIndexingRule({
            decisionBasis: indexer_common_1.IndexingDecisionBasis.RULES,
            deployment,
        });
        // Update the indexing rule according to the key/value pairs
        try {
            const client = yield client_1.createIndexerManagementClient({ url: config.api });
            const rule = yield rules_1.setIndexingRule(client, inputRule);
            rules_1.printIndexingRules(print, outputFormat, rules_1.parseDeploymentID(deployment), rule, []);
        }
        catch (error) {
            print.error(error.toString());
        }
    }),
};
