import fs from 'node:fs';
import path from 'node:path';
import { obterConversor } from '../../analysts/converters/index.js';
import { ExitCode, sair } from '../helpers/index.js';
import { messages } from '../../core/messages/index.js';
import { Command } from 'commander';
import ora from 'ora';
const log = messages.log;
const msgs = messages.CliComandoConverterMensagens;
export function comandoConverter() {
    const cmd = new Command('convert').alias('conv').description(msgs.descricao).requiredOption('-f, --file <arquivo>', 'Arquivo de origem para conversão').requiredOption('--from <plataforma>', 'Plataforma de origem (ex: github-actions)').requiredOption('--to <plataforma>', 'Plataforma de destino (ex: gitlab-ci)').option('-o, --output <arquivo>', 'Arquivo de saída (opcional)').action(async (opts) => {
        const inputPath = path.resolve(opts.file);
        let conteudo;
        try {
            conteudo = fs.readFileSync(inputPath, 'utf-8');
        }
        catch {
            log.erro(msgs.arquivoNaoEncontrado(opts.file));
            sair(ExitCode.Failure);
            return;
        }
        const conversor = obterConversor(opts.from, opts.to);
        if (!conversor) {
            log.erro(msgs.nenhumConversor(opts.from, opts.to));
            log.info(msgs.conversoresDisponiveis);
            sair(ExitCode.Failure);
            return;
        }
        const spinner = ora({
            text: msgs.convertendo(opts.from, opts.to),
            spinner: 'dots'
        }).start();
        try {
            const resultado = await conversor.converter(conteudo);
            if (!resultado.sucesso) {
                spinner.fail(msgs.falhaConversao);
                resultado.erros.forEach(erro => log.erro(erro));
                sair(ExitCode.Failure);
                return;
            }
            spinner.succeed(msgs.conversaoConcluida);
            if (resultado.avisos.length > 0) {
                console.log(`\n${msgs.avisosConversao}`);
                resultado.avisos.forEach(arquivo => console.log(msgs.avisoItem(arquivo)));
            }
            if (opts.output) {
                const outputPath = path.resolve(opts.output);
                fs.writeFileSync(outputPath, resultado.conteudo);
                log.sucesso(msgs.resultadoSalvo.replace('{output}', opts.output));
            }
            else {
                console.log(`\n--- ${msgs.resultadoDraft} ---\n`);
                console.log(resultado.conteudo);
                console.log('---\n');
            }
        }
        catch (err) {
            const msg = err instanceof Error ? err.message : String(err);
            spinner.fail(msgs.erroFatal(msg));
            sair(ExitCode.Failure);
        }
    });
    return cmd;
}
//# sourceMappingURL=command-convert.js.map