import { PLANTILLA_BOLETO_DEFAULT, renderBoleto } from './boleto';

const datos = {
  fecha: '2026-11-15',
  operacion: { numero: 'OPI-0000001' },
  empresa: { razon_social: 'Karmar Inmobiliaria S.A.', ruc: '80000000-1' },
  comprador: { nombre: 'María <Benítez>', documento: '1234567' },
  cotitulares: [{ nombre: 'Juan Pérez', documento: '7654321', rol: 'COTITULAR', porcentaje: 50 }],
  proyecto: { nombre: 'Torre Sol', direccion: 'Av. Mcal. López 1234', ciudad: 'Asunción' },
  unidad: { codigo: 'A-0802', descripcion: 'Departamento piso 8', cta_catastral: '', finca: '' },
  moneda: 'USD',
  precio: 80000,
  ajuste: 'NINGUNO' as const,
  cuotas: [
    { nro: 1, descripcion: 'Seña', fecha_vencimiento: '2026-10-10', monto: 2000 },
    { nro: 2, descripcion: 'Saldo contra posesión', fecha_vencimiento: null, monto: 78000 },
  ],
};

describe('renderBoleto', () => {
  it('reemplaza las variables, escapa los datos y arma el cronograma', () => {
    const html = renderBoleto(null, datos);
    expect(html).toContain('15 de noviembre de 2026');
    expect(html).toContain('María &lt;Benítez&gt;');
    expect(html).toContain('USD 80.000,00');
    expect(html).toContain('dólares americanos ochenta mil con 00/100');
    expect(html).toContain('Juan Pérez');
    expect(html).toContain('Contra posesión');
    expect(html).not.toMatch(/\{\{/);
  });

  it('una plantilla propia con una variable desconocida no rompe: queda vacía', () => {
    expect(renderBoleto('Hola {{comprador.nombre}} {{no.existe}}!', datos)).toBe('Hola María &lt;Benítez&gt; !');
  });

  it('la plantilla por defecto usa sólo variables conocidas', () => {
    const usadas = [...PLANTILLA_BOLETO_DEFAULT.matchAll(/\{\{\s*([\w.]+)\s*\}\}/g)].map((m) => m[1]);
    const html = renderBoleto(null, datos);
    expect(usadas.length).toBeGreaterThan(10);
    expect(html).not.toMatch(/\{\{/);
  });
});
