import { promises as fs } from 'node:fs';
import path from 'node:path';
import { config } from '../../core/config/index.js';
import { messages } from '../../core/messages/index.js';
const log = messages.log;
async function gerarRelatorioJson(caminho, options) {
    const { status, baseline, drift, erros, warnings } = options;
    const relatorio = {
        metadata: {
            timestamp: new Date().toISOString(),
            comando: 'guardian',
            schemaVersion: '1.0.0'
        },
        status,
        baseline: baseline || null,
        drift: drift || null,
        issues: {
            erros: erros || [],
            warnings: warnings || [],
            totalErros: erros?.length || 0,
            totalWarnings: warnings?.length || 0
        },
        resumo: {
            integridadeOk: status === 'ok' || status === 'baseline-criada',
            requerAtencao: (erros?.length || 0) > 0,
            drift: drift ? drift.alterouArquetipo : false
        }
    };
    await fs.writeFile(caminho, JSON.stringify(relatorio, null, 2));
}
async function gerarRelatorioMarkdown(caminho, options) {
    const { status, baseline, drift, erros, warnings } = options;
    const lines = [];
    lines.push(messages.GuardianMensagens.reportTitulo);
    lines.push('');
    lines.push(`**Gerado em:** ${new Date().toISOString()}`);
    lines.push(`**Comando:** \`tutanus guardian\``);
    lines.push('');
    const statusIcon = status === 'ok' ? '[SUCESSO]' : status === 'erro' ? '[ERRO]' : '[AVISO]';
    lines.push(`## ${statusIcon} Status: ${status}`);
    lines.push('');
    if (baseline) {
        lines.push(messages.GuardianMensagens.reportBaselineSection);
        lines.push('');
        lines.push('```json');
        lines.push(JSON.stringify(baseline, null, 2));
        lines.push('```');
        lines.push('');
    }
    if (drift) {
        lines.push(messages.GuardianMensagens.reportDriftSection);
        lines.push('');
        lines.push(messages.GuardianMensagens.reportArquetipoAlterado(drift.alterouArquetipo));
        if (drift.deltaConfidence) {
            lines.push(`- **Delta de confiança:** ${drift.deltaConfidence}%`);
        }
        if (drift.arquivosNovos && drift.arquivosNovos.length > 0) {
            lines.push('');
            lines.push(messages.GuardianMensagens.reportArquivosNovos);
            drift.arquivosNovos.forEach(arquivo => {
                lines.push(`- ${arquivo}`);
            });
        }
        if (drift.arquivosRemovidos && drift.arquivosRemovidos.length > 0) {
            lines.push('');
            lines.push(messages.GuardianMensagens.reportArquivosRemovidos);
            drift.arquivosRemovidos.forEach(arquivo => {
                lines.push(`- ${arquivo}`);
            });
        }
        lines.push('');
    }
    if (erros && erros.length > 0) {
        lines.push(messages.GuardianMensagens.reportErrosSection);
        lines.push('');
        erros.forEach((erro, idx) => {
            lines.push(`### ${idx + 1}. ${erro.arquivo}`);
            lines.push('');
            lines.push(`**Mensagem:** ${erro.mensagem}`);
            lines.push('');
        });
    }
    if (warnings && warnings.length > 0) {
        lines.push(messages.GuardianMensagens.reportAvisosSection);
        lines.push('');
        warnings.forEach((warning, idx) => {
            lines.push(`### ${idx + 1}. ${warning.arquivo}`);
            lines.push('');
            lines.push(`**Mensagem:** ${warning.mensagem}`);
            lines.push('');
        });
    }
    lines.push(messages.GuardianMensagens.reportRecomendacoesSection);
    lines.push('');
    if (status === 'ok') {
        lines.push(messages.GuardianMensagens.reportIntegridadeOk);
    }
    else if (status === 'erro') {
        lines.push(messages.GuardianMensagens.reportResolverErros);
        lines.push('- [INFO] Revisar arquivos listados acima');
    }
    else if (drift?.alterouArquetipo) {
        lines.push(messages.GuardianMensagens.reportDriftDetectado);
        lines.push(messages.GuardianMensagens.reportAtualizarBaseline);
    }
    await fs.writeFile(caminho, lines.join('\n'));
}
export async function exportarRelatoriosGuardian(options) {
    if (!config.REPORT_EXPORT_ENABLED) {
        return null;
    }
    try {
        const { baseDir } = options;
        const dir = typeof config.REPORT_OUTPUT_DIR === 'string' ? config.REPORT_OUTPUT_DIR : path.join(baseDir, 'reports');
        await fs.mkdir(dir, {
            recursive: true
        });
        const ts = new Date().toISOString().replace(/[:.]/g, '-');
        const nomeBase = `tutanus-guardian-${ts}`;
        const caminhoMd = path.join(dir, `${nomeBase}.md`);
        await gerarRelatorioMarkdown(caminhoMd, options);
        const caminhoJson = path.join(dir, `${nomeBase}.json`);
        await gerarRelatorioJson(caminhoJson, options);
        log.sucesso(messages.CliExportersMensagens.guardian.relatoriosExportadosTitulo);
        log.info(messages.CliExportersMensagens.guardian.caminhoMarkdown(caminhoMd));
        log.info(messages.CliExportersMensagens.guardian.caminhoJson(caminhoJson));
        return {
            markdown: caminhoMd,
            json: caminhoJson,
            dir
        };
    }
    catch (error) {
        log.erro(messages.CliExportersMensagens.guardian.falhaExportar(error instanceof Error ? error.message : String(error)));
        return null;
    }
}
//# sourceMappingURL=guardian-exporter.js.map