-- Muestra de certificados Tipo A/B/C Especial (para pruebas de impresión).
-- Requisito: haber corrido antes db_patch_certificado_tipos_especial.sql

WITH next_num AS (
    SELECT COALESCE(
        MAX(CAST(SUBSTRING(codigo_barras FROM 6) AS INTEGER)),
        0
    ) AS n
    FROM public.certificados
    WHERE codigo_barras ~ '^CERT-[0-9]+$'
),
ferreteria AS (
    SELECT id
    FROM public.ferreterias
    WHERE is_active = TRUE
    ORDER BY nombre ASC
    LIMIT 1
),
creador AS (
    SELECT id
    FROM auth.users
    ORDER BY created_at ASC NULLS LAST
    LIMIT 1
),
muestra AS (
    SELECT *
    FROM (
        VALUES
            (1, 'Wendy Pérez', '204115401', '0412-1112233', 'Los Teques', 'AE'),
            (2, 'José Gregorio Hernández', 'V-87654321', '0414-5556677', 'Cecilio Acosta', 'BE'),
            (3, 'María Rodríguez', 'V-12345678', '0424-9990011', 'San Pedro de los Altos', 'CE')
    ) AS x(ord, beneficiario_nombre, beneficiario_dni, beneficiario_telefono, parroquia, tipo_codigo)
)
INSERT INTO public.certificados (
    codigo_barras,
    beneficiario_nombre,
    beneficiario_dni,
    beneficiario_telefono,
    parroquia,
    tipo_id,
    ferreteria_id,
    monto_inicial,
    monto_actual,
    estado,
    creado_por
)
SELECT
    'CERT-' || LPAD((next_num.n + muestra.ord)::text, 5, '0'),
    muestra.beneficiario_nombre,
    muestra.beneficiario_dni,
    muestra.beneficiario_telefono,
    muestra.parroquia,
    t.id,
    ferreteria.id,
    t.monto,
    t.monto,
    'ACTIVO',
    creador.id
FROM muestra
CROSS JOIN next_num
CROSS JOIN ferreteria
LEFT JOIN creador ON TRUE
JOIN public.certificado_tipos t
    ON t.codigo = muestra.tipo_codigo
   AND t.is_active = TRUE
ORDER BY muestra.ord;

-- Verificación
SELECT c.codigo_barras, c.beneficiario_nombre, t.nombre AS tipo, c.monto_inicial, f.nombre AS ferreteria, c.estado
FROM public.certificados c
JOIN public.certificado_tipos t ON t.id = c.tipo_id
JOIN public.ferreterias f ON f.id = c.ferreteria_id
WHERE t.codigo IN ('AE', 'BE', 'CE')
ORDER BY c.codigo_barras;
