-- Oppgave 15.5: Ressursstyring — prioritetsregler, ressursgrenser, disk-status
--
-- Oppretter tabell for jobbtype-prioritetsregler som brukes av workeren
-- til å styre concurrency, prioritet og LiveKit-tilpasning.

CREATE TABLE job_priority_rules (
    job_type              TEXT PRIMARY KEY,
    base_priority         SMALLINT NOT NULL DEFAULT 5,
    -- Hvor mye prioriteten reduseres når LiveKit-rom er aktive
    livekit_priority_adj  SMALLINT NOT NULL DEFAULT 0,
    -- Ressursvekt (1=lett HTTP-kall, 5=tung CPU som Whisper)
    cpu_weight            SMALLINT NOT NULL DEFAULT 1,
    -- Maks samtidige jobber av denne typen (0 = ubegrenset)
    max_concurrent        SMALLINT NOT NULL DEFAULT 0,
    -- Timeout i sekunder (0 = bruk default)
    timeout_seconds       INT NOT NULL DEFAULT 0,
    -- Om jobben skal blokkeres helt under aktive LiveKit-sesjoner
    block_during_livekit  BOOLEAN NOT NULL DEFAULT false
);

-- Seed med kjente jobbtyper og fornuftige defaults
INSERT INTO job_priority_rules (job_type, base_priority, livekit_priority_adj, cpu_weight, max_concurrent, timeout_seconds, block_during_livekit)
VALUES
    ('whisper_transcribe',        5,  -3, 5, 1, 600, false),
    ('agent_respond',            10,   0, 1, 2, 120, false),
    ('suggest_edges',             3,   0, 1, 2, 120, false),
    ('summarize_communication',   5,   0, 1, 1, 120, false),
    ('tts_generate',              5,  -1, 2, 1, 300, false),
    ('audio_process',             5,  -2, 3, 1, 600, false),
    ('render_article',            7,   0, 1, 2,  60, false),
    ('render_index',              7,   0, 1, 2,  60, false);

-- Tabell for disk-status-snapshots (siste verdier brukes for varsling)
CREATE TABLE disk_status_log (
    id              BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    checked_at      TIMESTAMPTZ NOT NULL DEFAULT now(),
    mount_point     TEXT NOT NULL DEFAULT '/',
    total_bytes     BIGINT NOT NULL,
    used_bytes      BIGINT NOT NULL,
    available_bytes BIGINT NOT NULL,
    usage_percent   REAL NOT NULL,
    alert_level     TEXT -- NULL=ok, 'warning'=85%+, 'critical'=90%+, 'emergency'=95%+
);

-- Hold bare siste 1000 målinger
CREATE INDEX idx_disk_status_latest ON disk_status_log (checked_at DESC);
