CREATE OR REPLACE VIEW commerce.v_modelos_planes_pago_alertas_calidad AS
WITH base AS (
    SELECT
        mp.id_modelo,
        mp.business_id,
        mp.sucursal,
        mp.nombre_modelo,
        mp.activo,
        mp.es_default,
        mp.updated_at,
        CASE
            WHEN jsonb_typeof(mp.configuracion_contrato #> '{generacion,alertas_calidad,rojo}') = 'array'
                THEN mp.configuracion_contrato #> '{generacion,alertas_calidad,rojo}'
            ELSE '[]'::jsonb
        END AS alertas_rojo_json,
        CASE
            WHEN jsonb_typeof(mp.configuracion_contrato #> '{generacion,alertas_calidad,amarillo}') = 'array'
                THEN mp.configuracion_contrato #> '{generacion,alertas_calidad,amarillo}'
            ELSE '[]'::jsonb
        END AS alertas_amarillo_json,
        CASE
            WHEN jsonb_typeof(mp.configuracion_contrato #> '{generacion,campos_dinamicos}') = 'array'
                THEN mp.configuracion_contrato #> '{generacion,campos_dinamicos}'
            ELSE '[]'::jsonb
        END AS campos_dinamicos_json
    FROM commerce.modelos_planes_pago mp
    WHERE mp.soft_delete IS NOT TRUE
)
SELECT
    id_modelo,
    business_id,
    sucursal,
    nombre_modelo,
    activo,
    es_default,
    updated_at,
    alertas_rojo_json AS alertas_rojo,
    alertas_amarillo_json AS alertas_amarillo,
    jsonb_build_object(
        'rojo', alertas_rojo_json,
        'amarillo', alertas_amarillo_json
    ) AS alertas_calidad,
    jsonb_array_length(alertas_rojo_json) AS alertas_rojo_count,
    jsonb_array_length(alertas_amarillo_json) AS alertas_amarillo_count,
    jsonb_array_length(alertas_rojo_json) + jsonb_array_length(alertas_amarillo_json) AS alertas_total_count,
    campos_dinamicos_json AS campos_dinamicos,
    jsonb_array_length(campos_dinamicos_json) AS campos_dinamicos_count
FROM base;

CREATE INDEX IF NOT EXISTS modelos_planes_pago_generacion_alertas_gin_idx
    ON commerce.modelos_planes_pago
    USING gin ((configuracion_contrato #> '{generacion,alertas_calidad}') jsonb_path_ops)
    WHERE soft_delete IS NOT TRUE;

CREATE INDEX IF NOT EXISTS modelos_planes_pago_generacion_campos_gin_idx
    ON commerce.modelos_planes_pago
    USING gin ((configuracion_contrato #> '{generacion,campos_dinamicos}') jsonb_path_ops)
    WHERE soft_delete IS NOT TRUE;

COMMENT ON VIEW commerce.v_modelos_planes_pago_alertas_calidad IS 'Vista parseable de alertas de calidad y campos dinamicos del generador de contratos por modelo, sin exponer secciones internas en el HTML del cliente.';

ANALYZE commerce.modelos_planes_pago;
