-- Migration : tables dashboard vulnérabilités Qualys
-- Aligné sur le DDL prod (PG 15.16) — idempotent
-- Référencé par : app/services/qualys_service.py (compute_vuln_dashboard, load_vuln_dashboard)

CREATE TABLE IF NOT EXISTS qualys_vuln_snapshot_run (
    id            SERIAL PRIMARY KEY,
    run_at        TIMESTAMPTZ NOT NULL DEFAULT now(),
    status        VARCHAR(20) NOT NULL DEFAULT 'pending',
    asset_count   INTEGER NOT NULL DEFAULT 0,
    duration_sec  INTEGER NOT NULL DEFAULT 0,
    msg           TEXT,
    triggered_by  VARCHAR(50)
);

CREATE INDEX IF NOT EXISTS idx_vuln_run_at
    ON qualys_vuln_snapshot_run (run_at DESC);

CREATE TABLE IF NOT EXISTS qualys_vuln_snapshot (
    id                SERIAL PRIMARY KEY,
    run_id            INTEGER NOT NULL REFERENCES qualys_vuln_snapshot_run(id) ON DELETE CASCADE,
    dimension         VARCHAR(20) NOT NULL,
    dimension_value   VARCHAR(100),
    dimension_value2  VARCHAR(100),
    total             INTEGER NOT NULL DEFAULT 0,
    critical          INTEGER NOT NULL DEFAULT 0,
    high              INTEGER NOT NULL DEFAULT 0,
    medium            INTEGER NOT NULL DEFAULT 0,
    sain              INTEGER NOT NULL DEFAULT 0,
    non_scanne        INTEGER NOT NULL DEFAULT 0
);

CREATE INDEX IF NOT EXISTS idx_vuln_snap_run_dim
    ON qualys_vuln_snapshot (run_id, dimension);
CREATE INDEX IF NOT EXISTS idx_vuln_snap_dim_val
    ON qualys_vuln_snapshot (dimension, dimension_value);

-- Privilèges pour le user applicatif (mode demo + reel)
GRANT SELECT, INSERT, UPDATE, DELETE ON qualys_vuln_snapshot, qualys_vuln_snapshot_run TO patchcenter;
GRANT USAGE, SELECT ON SEQUENCE qualys_vuln_snapshot_id_seq, qualys_vuln_snapshot_run_id_seq TO patchcenter;
