"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 disputes_1 = require("../../../disputes");
const HELP = `
${chalk_1.default.bold('graph indexer disputes get')} [options] potential <minimumAllocationClosedEpoch>
  
${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: `Cross-check POIs submitted in the network`,
    run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
        const { print, parameters } = toolbox;
        const { h, help, o, output } = parameters.options;
        const [status, minAllocationClosedEpoch] = parameters.array || [];
        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;
        }
        if (!status || status !== 'potential') {
            print.error(`Must provide a dispute status filter, options: 'potential'`);
            process.exitCode = 1;
            return;
        }
        if (minAllocationClosedEpoch === null || minAllocationClosedEpoch === undefined) {
            print.error(`No minimum epoch for closed allocations provided`);
            process.exitCode = 1;
            return;
        }
        const config = config_1.loadValidatedConfig();
        // Create indexer API client
        const client = yield client_1.createIndexerManagementClient({ url: config.api });
        try {
            const storedDisputes = yield disputes_1.disputes(client, status, +minAllocationClosedEpoch);
            disputes_1.printDisputes(print, outputFormat, storedDisputes);
        }
        catch (error) {
            print.error(error.toString());
            process.exitCode = 1;
        }
    }),
};
