import { gerarBarrels } from '../../analysts/corrections/index.js';
import { ExitCode, sair } from '../helpers/index.js';
import { messages } from '../../core/messages/index.js';
import { Command } from 'commander';
const log = messages.log;
const msgs = messages.CliComandoBarrelsMensagens;
async function executarScan(baseDir, dryRun) {
    log.fase?.(msgs.scanTitulo);
    log.info(msgs.varrendoPastas);
    const resultado = await gerarBarrels(baseDir, true);
    if (resultado.erros.length > 0) {
        for (const erro of resultado.erros) {
            log.erro(erro);
        }
    }
    const criados = resultado.barris.filter(b => b.status === 'criado');
    const atualizados = resultado.barris.filter(b => b.status === 'atualizado');
    const erros = resultado.barris.filter(b => b.status === 'erro');
    if (criados.length > 0) {
        log.sucesso(msgs.scanCriaria(criados.length));
        for (const b of criados) {
            log.info(`  + ${b.caminho} (${b.detalhes})`);
        }
    }
    if (atualizados.length > 0) {
        log.sucesso(msgs.scanAtualizaria(atualizados.length));
        for (const b of atualizados) {
            log.info(`  ~ ${b.caminho} (${b.detalhes})`);
        }
    }
    if (erros.length > 0) {
        for (const b of erros) {
            log.erro(`  ! ${b.caminho}: ${b.detalhes}`);
        }
    }
    if (criados.length === 0 && atualizados.length === 0 && erros.length === 0) {
        log.info(msgs.nenhumaAcao);
    }
    log.info('');
    if (dryRun) {
        log.info(msgs.dryRunAviso);
    }
}
async function executarGerar(baseDir, dryRun) {
    if (dryRun) {
        await executarScan(baseDir, true);
        return;
    }
    log.info(msgs.varrendoPastas);
    const resultado = await gerarBarrels(baseDir, false);
    if (resultado.erros.length > 0) {
        for (const erro of resultado.erros) {
            log.erro(erro);
        }
    }
    if (resultado.barris.length > 0) {
        const statusIcon = {
            criado: '+',
            atualizado: '~',
            ok: '\u2219',
            erro: '!',
        };
        for (const b of resultado.barris) {
            const icon = statusIcon[b.status] ?? '?';
            if (b.status === 'erro') {
                log.erro(`  ${icon} ${b.caminho}: ${b.detalhes}`);
            }
            else if (b.status === 'criado' || b.status === 'atualizado') {
                log.sucesso(`  ${icon} ${b.caminho} (${b.detalhes})`);
            }
        }
    }
    log.info('');
    log.sucesso(msgs.resultado(resultado.criados, resultado.atualizados, resultado.erros.length));
}
function executarAcaoBarrels(opts) {
    const projectRoot = process.cwd();
    if (!opts.scan && !opts.generate) {
        log.aviso(msgs.useGerarOuScan);
        sair(ExitCode.InvalidUsage);
        return;
    }
    if (opts.scan && opts.generate) {
        log.aviso(msgs.gerarScanMutuamenteExclusivos);
        sair(ExitCode.InvalidUsage);
        return;
    }
    if (opts.scan) {
        executarScan(projectRoot, opts.dryRun ?? false).catch(err => {
            log.erro(msgs.erroExecutar(err instanceof Error ? err.message : String(err)));
            sair(ExitCode.Failure);
        });
    }
    if (opts.generate) {
        executarGerar(projectRoot, opts.dryRun ?? false).catch(err => {
            log.erro(msgs.erroExecutar(err instanceof Error ? err.message : String(err)));
            sair(ExitCode.Failure);
        });
    }
}
export function comandoBarrels() {
    const cmd = new Command('barrels');
    cmd.description(msgs.descricao);
    cmd.option('--scan', msgs.scanDescricao, false);
    cmd.option('--generate', msgs.gerarDescricao, false);
    cmd.option('--dry-run', msgs.dryRunDescricao, false);
    cmd.action((opts) => {
        try {
            executarAcaoBarrels(opts);
        }
        catch (err) {
            log.erro(msgs.erroExecutar(err instanceof Error ? err.message : String(err)));
            if (process.env.DEV_MODE) {
                console.error(err);
            }
            sair(ExitCode.Failure);
        }
    });
    return cmd;
}
//# sourceMappingURL=command-barrels.js.map