/**
 * Módulo de Plantillas PDF - Exportación de plantillas para representaciones imprimibles
 * 
 * Este módulo exporta todas las plantillas HTML para la generación de representaciones
 * imprimibles (PDF) de los documentos electrónicos.
 */

import * as fs from 'fs';
import * as path from 'path';

// Función para leer una plantilla
function readTemplate(filename: string): string {
  try {
    // Primero intentamos leer desde el directorio actual (para desarrollo)
    const templatePath = path.join(__dirname, filename);
    return fs.readFileSync(templatePath, 'utf8');
  } catch (err) {
    try {
      // Si falla, intentamos leer desde el directorio src/pdf/templates (para npm)
      const srcPath = path.join(process.cwd(), 'src', 'pdf', 'templates', filename);
      return fs.readFileSync(srcPath, 'utf8');
    } catch (err2) {
      // Si ambos fallan, intentamos leer desde node_modules (para npm)
      const nodeModulesPath = path.join(process.cwd(), 'node_modules', 'nodefact', 'src', 'pdf', 'templates', filename);
      return fs.readFileSync(nodeModulesPath, 'utf8');
    }
  }
}

// Plantillas para facturas y boletas
export const invoiceTemplate = readTemplate('invoice.html.twig');

// Plantillas para notas de crédito
export const creditNoteTemplate = readTemplate('notacr.html.twig');

// Plantillas para notas de débito
export const debitNoteTemplate = readTemplate('notadb.html.twig');

// Plantillas para guías de remisión
export const dispatchTemplate = readTemplate('dispatch.html.twig');

// Plantillas para comprobantes de retención
export const retentionTemplate = readTemplate('retention.html.twig');

// Plantillas para comprobantes de percepción
export const perceptionTemplate = readTemplate('perception.html.twig');

// Plantillas para resúmenes diarios
export const summaryTemplate = readTemplate('summary.html.twig');

// Plantillas para comunicaciones de baja
export const voidedTemplate = readTemplate('voided.html.twig');

// Exportar todas las plantillas en un objeto
export const templates = {
  invoice: invoiceTemplate,
  creditNote: creditNoteTemplate,
  debitNote: debitNoteTemplate,
  dispatch: dispatchTemplate,
  retention: retentionTemplate,
  perception: perceptionTemplate,
  summary: summaryTemplate,
  voided: voidedTemplate,
};

// Función para obtener una plantilla por tipo de documento
export function getTemplateByDocumentType(documentType: string): string {
  switch (documentType) {
    case '01': // Factura
    case '03': // Boleta
      return invoiceTemplate;
    case '07': // Nota de crédito
      return creditNoteTemplate;
    case '08': // Nota de débito
      return debitNoteTemplate;
    case '09': // Guía de remisión
      return dispatchTemplate;
    case '20': // Comprobante de retención
      return retentionTemplate;
    case '40': // Comprobante de percepción
      return perceptionTemplate;
    case 'RC': // Resumen diario
      return summaryTemplate;
    case 'RA': // Comunicación de baja
      return voidedTemplate;
    default:
      throw new Error(`No se encontró una plantilla para el tipo de documento: ${documentType}`);
  }
}
