import type { AuditReport } from './types';

export function generateAuditMarkdown(report: AuditReport): string {
  let md = `# Relatório de Auditoria — BrainWind\n\n`;
  md += `**Provedor:** ${report.provider} (${report.model})\n`;
  md += `**Data:** ${new Date(report.timestamp).toLocaleString('pt-BR')}\n\n`;

  md += `## Resumo Geral\n`;
  md += `- **Total de Cenários:** ${report.totalScenarios}\n`;
  md += `- **PASS:** ${report.totalPassed} ✅\n`;
  md += `- **WARN:** ${report.totalWarnings} ⚠️\n`;
  md += `- **FAIL:** ${report.totalFailed} ❌\n\n`;

  for (const mod of report.modules) {
    md += `## Módulo: ${mod.moduleLabel}\n`;
    md += `**Total:** ${mod.totalScenarios} | **PASS:** ${mod.passed} | **WARN:** ${mod.warnings} | **FAIL:** ${mod.failed}\n\n`;

    for (const sc of mod.scenarios) {
      const icon = sc.verdict === 'PASS' ? '✅' : sc.verdict === 'WARN' ? '⚠️' : '❌';
      md += `### ${icon} Cenário: ${sc.scenarioId}\n`;
      md += `**Veredito:** ${sc.verdict} — *${sc.summary}*\n\n`;
      
      if (sc.llmNotes) {
        md += `**Observações da IA:** ${sc.llmNotes}\n\n`;
      }

      if (sc.enunciado_problema) {
        md += `**Enunciado do Problema:**\n> ${sc.enunciado_problema}\n\n`;
      }
      if (sc.tabelas_nbr_consultadas) {
        md += `**Tabelas NBR 6123 Consultadas:**\n> ${sc.tabelas_nbr_consultadas}\n\n`;
      }

      md += `**Raciocínio Matemático Teórico (Chain of Thought):**\n`;
      const calcSteps = sc.calculation_steps || 'Sem raciocínio fornecido pela IA.';
      md += `> ${calcSteps.split('\n').join('\n> ')}\n\n`;

      if (sc.resultado_app) {
        md += `**Avaliação do Resultado do App:**\n> ${sc.resultado_app}\n\n`;
      }
      if (sc.desvio_percentual) {
        md += `**Desvio Percentual Encontrado:** ${sc.desvio_percentual}\n\n`;
      }

      md += `**Verificações Individuais:**\n`;
      for (const chk of sc.checks) {
        const chkIcon = chk.status === 'PASS' ? '✅' : chk.status === 'WARN' ? '⚠️' : '❌';
        md += `- ${chkIcon} **${chk.name}:** Calculado IA = \`${chk.expected}\` | App = \`${chk.actual}\`\n`;
        if (chk.explanation) {
          md += `  - *Nota:* ${chk.explanation}\n`;
        }
      }
      md += `\n---\n\n`;
    }
  }

  return md;
}

export function downloadAuditMarkdown(report: AuditReport) {
  const md = generateAuditMarkdown(report);
  const blob = new Blob([md], { type: 'text/markdown;charset=utf-8' });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  
  const dateStr = new Date(report.timestamp).toLocaleDateString('pt-BR').replace(/\//g, '-');
  const safeModel = report.model.split('/').pop()?.replace(/[^a-zA-Z0-9_-]/g, '-') || 'LLM';
  const filename = `Audit-${safeModel}_${dateStr}.md`;
  
  link.setAttribute('href', url);
  link.setAttribute('download', filename);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}
