-- Inicialización de la base de datos para CLARA
-- Servicio inmutable de log de entrada

-- Tabla principal: clara_log
CREATE TABLE IF NOT EXISTS clara_log (
    id              BIGSERIAL PRIMARY KEY,
    h_instancia     VARCHAR(64) NOT NULL,
    h_entrada       VARCHAR(64) NOT NULL,
    contenedor      JSONB NOT NULL,
    r2_paths        JSONB,
    created_at      TIMESTAMP DEFAULT NOW()
);

-- Índices para búsqueda eficiente
CREATE INDEX IF NOT EXISTS idx_clara_instancia ON clara_log(h_instancia);
CREATE INDEX IF NOT EXISTS idx_clara_entrada ON clara_log(h_entrada);
CREATE INDEX IF NOT EXISTS idx_clara_created ON clara_log(created_at DESC);

-- Índice para buscar por estado del contenedor
CREATE INDEX IF NOT EXISTS idx_clara_estado ON clara_log((contenedor->'estado'->>'actual'));

-- Índice para buscar por timestamp de captura
CREATE INDEX IF NOT EXISTS idx_clara_timestamp ON clara_log((contenedor->'origen'->>'timestamp_captura'));

-- Índice compuesto para búsquedas frecuentes
CREATE INDEX IF NOT EXISTS idx_clara_inst_entrada ON clara_log(h_instancia, h_entrada);

-- Vista para consultas comunes
CREATE OR REPLACE VIEW clara_summary AS
SELECT
    id,
    h_instancia,
    h_entrada,
    contenedor->>'id' as contenedor_id,
    contenedor->'origen'->>'timestamp_captura' as timestamp_captura,
    contenedor->'archivo'->>'tipo' as tipo_archivo,
    contenedor->'archivo'->>'categoria' as categoria,
    contenedor->'estado'->>'actual' as estado_actual,
    jsonb_array_length(COALESCE(contenedor->'tags', '[]'::jsonb)) as num_tags,
    created_at
FROM clara_log
ORDER BY id DESC;

-- Comentarios para documentación
COMMENT ON TABLE clara_log IS 'Log inmutable de contenedores recibidos de PACKET';
COMMENT ON COLUMN clara_log.h_instancia IS 'Hash de identificación de la instancia DECK';
COMMENT ON COLUMN clara_log.h_entrada IS 'Hash del archivo (sha256)';
COMMENT ON COLUMN clara_log.contenedor IS 'Contenedor completo según esquema de contratos-comunes';
COMMENT ON COLUMN clara_log.r2_paths IS 'Rutas de los archivos en Cloudflare R2';
COMMENT ON COLUMN clara_log.created_at IS 'Timestamp de recepción (inmutable)';
