import { exportarComplianceJson, exportarComplianceMarkdown } from '../diagnostic/exporters/index.js';
import { getMessages } from '../../core/messages/index.js';
import { gerarRelatorioCompliance, listarFrameworks } from '../../reports/compliance/index.js';
import { Command } from 'commander';
const { log, CliComandoComplianceMensagens } = getMessages();
const msgs = CliComandoComplianceMensagens;
export function comandoCompliance() {
    const cmd = new Command('compliance')
        .description(msgs.descricao);
    cmd.command('list')
        .description(msgs.descricaoList)
        .action(() => {
        log.info(msgs.frameworksDisponiveis);
        for (const fw of listarFrameworks()) {
            log.info(`  - ${fw}`);
        }
    });
    cmd.command('report <framework>')
        .description(msgs.descricaoReport)
        .option('--json', 'Saída em formato JSON')
        .option('-o, --output <arquivo>', 'Arquivo de saída')
        .action(async (framework, opts) => {
        const frameworks = listarFrameworks();
        if (!frameworks.includes(framework)) {
            log.erro(msgs.frameworkNaoReconhecido(framework));
            return;
        }
        const { processarDiagnostico } = await import('../diagnostic/index.js');
        const resultado = await processarDiagnostico({ json: true });
        const ocorrencias = resultado.resultadoFinal?.ocorrencias ?? [];
        const relatorio = gerarRelatorioCompliance(framework, ocorrencias, {
            nomeProjeto: process.cwd().split('/').pop() || 'projeto',
            duracao: resultado.resultadoFinal?.metricas?.tempoTotal ?? 0,
            totalArquivos: resultado.resultadoFinal?.metricas?.totalArquivos ?? 0,
        });
        if (!relatorio) {
            log.erro(msgs.falhaGerarRelatorio);
            return;
        }
        const saida = opts.json ? exportarComplianceJson(relatorio) : exportarComplianceMarkdown(relatorio);
        const outputFile = opts.output;
        if (outputFile) {
            await import('node:fs')
                .then(({ promises: { writeFile } }) => writeFile(outputFile, saida, 'utf-8'))
                .then(() => log.sucesso(msgs.relatorioSalvo(outputFile)))
                .catch(err => log.erro(msgs.falhaSalvarRelatorio(err instanceof Error ? err.message : String(err))));
        }
        else {
            console.log(saida);
        }
    });
    return cmd;
}
//# sourceMappingURL=command-compliance.js.map