/**
 * Utilitários para exportação de dados (CSV, PDF)
 */

/**
 * Exporta dados para CSV
 */
export function exportToCSV<T extends Record<string, any>>(
  data: T[],
  filename: string,
  headers?: Record<string, string>
): void {
  if (data.length === 0) {
    alert('Nenhum dado para exportar');
    return;
  }

  // Obter todas as chaves dos objetos
  const keys = Object.keys(data[0]);

  // Criar cabeçalhos
  const csvHeaders = keys.map((key) => headers?.[key] || key);

  // Criar linhas de dados
  const csvRows = data.map((row) =>
    keys.map((key) => {
      const value = row[key];
      // Escapar valores que contêm vírgulas ou aspas
      if (typeof value === 'string' && (value.includes(',') || value.includes('"'))) {
        return `"${value.replace(/"/g, '""')}"`;
      }
      return value ?? '';
    })
  );

  // Combinar cabeçalhos e linhas
  const csvContent = [
    csvHeaders.join(','),
    ...csvRows.map((row) => row.join(',')),
  ].join('\n');

  // Adicionar BOM para UTF-8 (suporte a caracteres especiais)
  const BOM = '\uFEFF';
  const blob = new Blob([BOM + csvContent], { type: 'text/csv;charset=utf-8;' });

  // Criar link de download
  const link = document.createElement('a');
  const url = URL.createObjectURL(blob);
  link.setAttribute('href', url);
  link.setAttribute('download', `${filename}.csv`);
  link.style.visibility = 'hidden';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

/**
 * Exporta dados para JSON
 */
export function exportToJSON<T>(data: T[], filename: string): void {
  const jsonContent = JSON.stringify(data, null, 2);
  const blob = new Blob([jsonContent], { type: 'application/json' });

  const link = document.createElement('a');
  const url = URL.createObjectURL(blob);
  link.setAttribute('href', url);
  link.setAttribute('download', `${filename}.json`);
  link.style.visibility = 'hidden';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

/**
 * Gera PDF usando jsPDF (requer biblioteca jsPDF)
 * Nota: Esta função requer a instalação de jspdf e jspdf-autotable
 * npm install jspdf jspdf-autotable
 * 
 * Por enquanto, esta função está desabilitada. Para habilitar:
 * 1. Instale: npm install jspdf jspdf-autotable
 * 2. Descomente o código abaixo
 */
export async function exportToPDF<T extends Record<string, any>>(
  data: T[],
  filename: string,
  title: string,
  headers?: Record<string, string>
): Promise<void> {
  // Função desabilitada até que jspdf seja instalado
  alert('Exportação para PDF não está disponível. Use exportação CSV ou JSON.');
  
  /* Código comentado - descomente após instalar jspdf
  try {
    // Dynamic import para jsPDF
    const { jsPDF } = await import('jspdf');
    await import('jspdf-autotable');
    
    const doc = new jsPDF();

    // Adicionar título
    doc.setFontSize(16);
    doc.text(title, 14, 15);

    // Preparar dados da tabela
    const keys = Object.keys(data[0]);
    const tableHeaders = keys.map((key) => headers?.[key] || key);
    const tableData = data.map((row) =>
      keys.map((key) => String(row[key] ?? ''))
    );

    // Adicionar tabela usando autoTable
    (doc as any).autoTable({
      head: [tableHeaders],
      body: tableData,
      startY: 25,
    });

    doc.save(`${filename}.pdf`);
  } catch (error) {
    console.error('Erro ao exportar PDF:', error);
    alert('Erro ao exportar PDF. Certifique-se de que as bibliotecas jspdf e jspdf-autotable estão instaladas.');
  }
  */
}

