import { mapaReversao } 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, logAuto, logSistema } = messages;
export function registrarComandoReverter(program) {
    program.command('reverter').description(messages.CliComandoReverterMensagens.descricao).hook('preAction', async () => {
        if (process.env.TUTANUS_TEST_FAST === '1') {
            try {
                await mapaReversao.carregar();
            }
            catch (err) {
                if (process.env.VITEST === '1')
                    return;
                log.aviso(`Falha ao carregar mapa de reversão (fast-mode): ${err instanceof Error ? err.message : String(err)}`);
            }
        }
    }).addCommand(new Command('listar').description(messages.CliComandoReverterMensagens.descricaoListar).action(async () => {
        try {
            await mapaReversao.carregar();
            const _lista = mapaReversao.listarMoves();
        }
        catch (err) {
            log.erro(`Falha ao listar moves: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    })).addCommand(new Command('arquivo').description(messages.CliComandoReverterMensagens.descricaoArquivo).argument('<arquivo>', 'Caminho do arquivo para reverter').action(async (arquivo) => {
        try {
            await mapaReversao.carregar();
            if (!mapaReversao.podeReverterArquivo(arquivo)) {
                logSistema.reversaoNenhumMove(arquivo);
                sair(ExitCode.Failure);
                return;
            }
            logSistema.reversaoRevertendo(arquivo);
            const sucesso = await mapaReversao.reverterArquivo(arquivo);
            if (sucesso) {
                logSistema.reversaoSucesso(arquivo);
            }
            else {
                logSistema.reversaoFalha(arquivo);
                sair(ExitCode.Failure);
                return;
            }
        }
        catch (err) {
            log.erro(`Falha ao reverter arquivo: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    })).addCommand(new Command('move').description(messages.CliComandoReverterMensagens.descricaoMove).argument('<id>', 'ID do move para reverter').action(async (id) => {
        try {
            await mapaReversao.carregar();
            logAuto.mapaReversaoRevertendoMove(id);
            const sucesso = await mapaReversao.reverterMove(id);
            if (sucesso) {
                logAuto.mapaReversaoMoveRevertido(id);
            }
            else {
                logAuto.mapaReversaoFalhaReverterMove(id);
                sair(ExitCode.Failure);
                return;
            }
        }
        catch (err) {
            log.erro(`Falha ao reverter move: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    })).addCommand(new Command('limpar').description(messages.CliComandoReverterMensagens.descricaoLimpar).option('-f, --force', 'Não pede confirmação').action(async (options) => {
        try {
            await mapaReversao.carregar();
            if (!options.force) {
                sair(ExitCode.Failure);
                return;
            }
            await mapaReversao.limpar();
            log.sucesso(messages.CliComandoReverterMensagens.mapaLimpoComSucesso(messages.ICONES_DIAGNOSTICO.sucesso));
        }
        catch (err) {
            log.erro(`Falha ao limpar mapa: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    })).addCommand(new Command('status').description(messages.CliComandoReverterMensagens.descricaoStatus).action(async () => {
        try {
            await mapaReversao.carregar();
            const moves = mapaReversao.obterMoves();
            if (moves.length > 0) {
                const ultimoMove = moves.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())[0];
                const dataPtBr = new Date(ultimoMove.timestamp).toLocaleString('pt-BR');
                log.info(messages.CliComandoReverterMensagens.ultimoMove(dataPtBr));
            }
        }
        catch (err) {
            log.erro(`Falha ao obter status: ${err instanceof Error ? err.message : String(err)}`);
            sair(ExitCode.Failure);
        }
    }));
}
//# sourceMappingURL=command-reverter.js.map