// MUESTRA DE LA FACTURA EN PDF.
//
// Devuelve una factura de ejemplo, con datos inventados y sin ningun valor
// fiscal, armada por el MISMO codigo que arma las de verdad. Sirve para dos
// cosas: que el negocio vea como le queda su factura antes de mandarle una a
// un cliente, y que se pueda comprobar cual version esta viva sin tener que
// enviar un correo.
//
// No toca la base de datos ni expone nada: todos los datos son de mentira.
interface Entorno {
  SELLO_BASE?: string;
}

const DOCUMENTO = {
  emisor: {
    rif: 'J-00000000-0',
    razon_social: 'Negocio de Muestra, C.A.',
    domicilio_fiscal: 'Avenida Principal, Araure, estado Portuguesa',
  },
  cliente: { nombre: 'María Rodríguez Peña', cedula: 'V-22606827' },
  renglones: [
    { nombre: 'Producto de muestra', cantidad: 2, precio_usd: 5, alicuota: 16, base_usd: 8.62, iva_usd: 1.38, total_usd: 10 },
    { nombre: 'Bebida natural', cantidad: 1, precio_usd: 2, alicuota: 0, base_usd: 2, iva_usd: 0, total_usd: 2 },
    { nombre: 'Otro producto de muestra', cantidad: 3, precio_usd: 2, alicuota: 16, base_usd: 5.17, iva_usd: 0.83, total_usd: 6 },
  ],
  por_alicuota: [
    { alicuota: 16, base_usd: 13.79, iva_usd: 2.21 },
    { alicuota: 0, base_usd: 2, iva_usd: 0 },
  ],
  base_usd: 15.79,
  iva_usd: 2.21,
  total_usd: 18,
  tasa_bs: 746.63,
  pago: { metodo: 'pago_movil', referencia: '4821' },
};

export const onRequestGet: PagesFunction<Entorno> = async (ctx) => {
  const url = new URL(ctx.request.url);
  const color = url.searchParams.get('color');
  const mensaje = url.searchParams.get('mensaje');
  const razon = url.searchParams.get('negocio');
  const base = ctx.env.SELLO_BASE ?? 'https://sello.gustitoxpress.app';

  try {
    const { pdfFactura } = await import('../lib/pdf_factura.js');
    const bytes = await pdfFactura({
      tipo: 'factura',
      serie: 'A',
      numero: 1,
      control: 1,
      fecha: new Date().toISOString(),
      fecha_asignacion: new Date().toISOString(),
      rango: { desde: 1, hasta: 50000 },
      documento: razon
        ? { ...DOCUMENTO, emisor: { ...DOCUMENTO.emisor, razon_social: razon.slice(0, 80) } }
        : DOCUMENTO,
      marca: {
        mensaje_pie: mensaje ? mensaje.slice(0, 240) : 'Gracias por su compra.',
        color: color && /^#?[0-9a-fA-F]{6}$/.test(color) ? (color.startsWith('#') ? color : `#${color}`) : null,
      },
      logo: null,
      imprenta: {
        rif: 'J-00000000-0',
        razon_social: 'Imprenta Digital de Muestra',
        providencia: 'SNAT/0000/000000',
        providencia_fecha: '2026-01-01',
      },
      enlace: `${base}/v/muestra`,
    });
    return new Response(bytes, {
      headers: {
        'content-type': 'application/pdf',
        'content-disposition': 'inline; filename="muestra-factura.pdf"',
        'cache-control': 'no-store',
      },
    });
  } catch (e) {
    return new Response(`No se pudo armar la muestra: ${(e as Error).message}`, {
      status: 500,
      headers: { 'content-type': 'text/plain; charset=utf-8' },
    });
  }
};
