-- Oppgave 15.3: Jobbkø-tabell
--
-- Denne tabellen har vært referert fra jobs.rs og maintenance.rs
-- men manglet som formell migrasjon. Oppretter den nå med enum,
-- indekser og kolonner som matcher eksisterende Rust-kode.

CREATE TYPE job_status AS ENUM ('pending', 'running', 'completed', 'error', 'retry');

CREATE TABLE job_queue (
    id                 UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    collection_node_id UUID REFERENCES nodes(id) ON DELETE CASCADE,
    job_type           TEXT NOT NULL,
    payload            JSONB NOT NULL DEFAULT '{}',
    status             job_status NOT NULL DEFAULT 'pending',
    priority           SMALLINT NOT NULL DEFAULT 0,
    result             JSONB,
    error_msg          TEXT,
    attempts           SMALLINT NOT NULL DEFAULT 0,
    max_attempts       SMALLINT NOT NULL DEFAULT 3,
    created_at         TIMESTAMPTZ NOT NULL DEFAULT now(),
    started_at         TIMESTAMPTZ,
    completed_at       TIMESTAMPTZ,
    scheduled_for      TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- Indeks for effektiv dequeue: henter ventende/retry-jobber sortert etter prioritet
CREATE INDEX idx_job_queue_pending ON job_queue (priority DESC, scheduled_for ASC)
    WHERE status IN ('pending', 'retry');

-- Indeks for admin-oversikt: filtrer på status
CREATE INDEX idx_job_queue_status ON job_queue (status, created_at DESC);

-- Indeks for filtrering på jobbtype
CREATE INDEX idx_job_queue_type ON job_queue (job_type, created_at DESC);
