import path from 'node:path';
import { listarAnalistas, registroAnalistas } from '../../analysts/registry/index.js';
import { ExitCode, sair } from '../helpers/index.js';
import { config } from '../../core/config/index.js';
import { messages } from '../../core/messages/index.js';
import { salvarEstado } from '../../shared/persistence/index.js';
import { Command } from 'commander';
const log = messages.log;
export function comandoAnalistas() {
    return new Command('analistas').description(messages.CliComandoAnalistasMensagens.descricao).option('-j, --json', 'Saída em JSON').option('-o, --output <arquivo>', 'Arquivo para exportar JSON de analistas').option('-d, --doc <arquivo>', 'Gera documentação Markdown dos analistas').action(async (opts) => {
        try {
            if (process.env.TUTANUS_TEST_FAST === '1') {
                if (opts.json) {
                    log.info(JSON.stringify({
                        total: 0,
                        analistas: [],
                        meta: {
                            fast: true,
                            tipo: 'analistas'
                        }
                    }, null, 2));
                    return;
                }
                log.info(messages.CliComandoAnalistasMensagens.fastModeTitulo);
                log.info(messages.CliComandoAnalistasMensagens.fastModeTotalZero);
                return;
            }
            const lista = listarAnalistas();
            if (opts.doc) {
                const destinoDoc = path.isAbsolute(opts.doc) ? opts.doc : path.join(process.cwd(), opts.doc);
                const linhas = [];
                linhas.push(messages.CliComandoAnalistasMensagens.docMdTitulo);
                linhas.push('');
                linhas.push(messages.CliComandoAnalistasMensagens.docGeradoEm(new Date().toISOString()));
                linhas.push('');
                linhas.push(messages.CliComandoAnalistasMensagens.docTabelaHeader);
                linhas.push(messages.CliComandoAnalistasMensagens.docTabelaSeparador);
                for (const arquivo of lista) {
                    const registroOriginal = registroAnalistas.find(raiz => raiz.nome === arquivo.nome);
                    let limitesStr = '';
                    if (registroOriginal?.limites) {
                        limitesStr = Object.entries(registroOriginal.limites).map(([chave, valor]) => `${chave}:${valor}`).join('<br>');
                    }
                    linhas.push(messages.CliComandoAnalistasMensagens.docLinhaAnalista(arquivo.nome, arquivo.categoria, arquivo.descricao || '', limitesStr));
                }
                linhas.push('');
                await salvarEstado(destinoDoc, linhas.join('\n'));
                log.sucesso(messages.CliComandoAnalistasMensagens.docGerada(destinoDoc));
                return;
            }
            if (opts.output) {
                const destino = path.isAbsolute(opts.output) ? opts.output : path.join(process.cwd(), opts.output);
                await salvarEstado(destino, {
                    geradoEm: new Date().toISOString(),
                    total: lista.length,
                    analistas: lista,
                    configLimites: config.ANALISE_LIMITES ?? {}
                });
                log.sucesso(messages.CliComandoAnalistasMensagens.jsonExportado(destino));
                return;
            }
            if (opts.json) {
                log.info(JSON.stringify({
                    total: lista.length,
                    analistas: lista
                }, null, 2));
                return;
            }
            log.info(messages.CliComandoAnalistasMensagens.titulo);
            for (const arquivo of lista) {
                log.info(messages.CliComandoAnalistasMensagens.linhaAnalista(arquivo.nome, arquivo.categoria, arquivo.descricao));
            }
            log.info(messages.CliComandoAnalistasMensagens.tituloComIcone(messages.ICONES_DIAGNOSTICO.info));
            log.info(messages.CliComandoAnalistasMensagens.total(registroAnalistas.length));
        }
        catch (err) {
            log.erro(`Falha ao listar analistas: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    });
}
//# sourceMappingURL=command-analysts.js.map