import { getMessages } from '../core/messages/index.js';
export async function gerarRelatorioMarkdown(resultado, outputCaminho, modoBrief = false, options) {
    const { gerarHeaderRelatorio, gerarSecaoGuardian, gerarTabelaOcorrencias, gerarTabelaResumoTipos, RelatorioMensagens } = getMessages();
    const { totalArquivos = 0, ocorrencias = [], guardian, timestamp = Date.now(), duracaoMs = 0 } = (resultado || {});
    const dataISO = new Date(timestamp).toISOString();
    if (modoBrief) {
        const { processarRelatorioResumo, gerarRelatorioMarkdownResumo } = await import('./index.js');
        const relatorioResumo = processarRelatorioResumo(ocorrencias);
        await gerarRelatorioMarkdownResumo(relatorioResumo, outputCaminho);
        return;
    }
    const ocorrenciasOrdenadas = [...ocorrencias].sort((arquivo, base) => {
        const ra = String(arquivo.relPath ?? '');
        const rb = String(base.relPath ?? '');
        const cmp = ra.localeCompare(rb);
        if (cmp !== 0)
            return cmp;
        const la = typeof arquivo.linha === 'number' ? arquivo.linha : Number.MAX_SAFE_INTEGER;
        const lb = typeof base.linha === 'number' ? base.linha : Number.MAX_SAFE_INTEGER;
        return la - lb;
    });
    const guardianData = guardian && typeof guardian === 'object' ? {
        status: 'status' in guardian ? String(guardian.status) : 'não executada',
        timestamp: 'timestamp' in guardian ? String(guardian.timestamp) : '-',
        totalArquivos: 'totalArquivos' in guardian ? String(guardian.totalArquivos) : '-'
    } : {
        status: 'não executada',
        timestamp: '-',
        totalArquivos: '-'
    };
    const lines = [];
    lines.push(...gerarHeaderRelatorio({
        dataISO,
        duracao: duracaoMs,
        totalArquivos,
        totalOcorrencias: ocorrencias.length
    }));
    if (options && options.manifestFile && options.relatoriosDir) {
        const relPath = options.manifestFile;
        lines.push(`**${RelatorioMensagens.principal.secoes.metadados.arquivoManifest}:** \`${relPath}\`  `);
        lines.push('');
        lines.push(`> ${RelatorioMensagens.principal.secoes.metadados.notaManifest}`);
        lines.push('');
        lines.push('---');
        lines.push('');
    }
    lines.push(...gerarSecaoGuardian(guardianData));
    const tiposContagem = {};
    for (const ocorrencia of ocorrencias) {
        const tipo = ocorrencia && ocorrencia.tipo || 'desconhecido';
        tiposContagem[String(tipo)] = (tiposContagem[String(tipo)] || 0) + 1;
    }
    lines.push(...gerarTabelaResumoTipos(tiposContagem, 10));
    lines.push('---');
    lines.push('');
    lines.push(`## ${RelatorioMensagens.principal.secoes.ocorrencias.titulo} (amostra)`);
    lines.push('');
    const AMOSTRA_MAX = 2000;
    const sample = ocorrenciasOrdenadas.slice(0, AMOSTRA_MAX);
    lines.push(...gerarTabelaOcorrencias(sample));
    if (ocorrenciasOrdenadas.length > AMOSTRA_MAX) {
        lines.push('');
        lines.push(RelatorioMensagens.principal.secoes.ocorrencias.mostrandoAmostra(AMOSTRA_MAX));
    }
    const { salvarEstado } = await import('../shared/persistence/index.js');
    await salvarEstado(outputCaminho, lines.join('\n'));
}
export async function gerarRelatorioJson(resultado, outputCaminho) {
    const { criarRelatorioComVersao } = await import('../core/schema/index.js');
    const relatorioVersionado = criarRelatorioComVersao(resultado, undefined, 'Relatório completo de diagnóstico do Tutanus');
    const { salvarEstado } = await import('../shared/persistence/index.js');
    await salvarEstado(outputCaminho, relatorioVersionado.dados ?? resultado);
}
//# sourceMappingURL=generator-report.js.map