-- +goose Up
-- +goose StatementBegin

-- Backup-History: jede Backup-Operation (manual oder scheduled) wird
-- nach Abschluss hier eingetragen — Operator sieht die Liste in der
-- /backup-UI mit Größe, Dauer, Status. Files liegen auf der lokalen
-- Box unter /var/backups/edgeguard/<file>; nicht zwischen Cluster-
-- Nodes synchronisiert (Backup ist node-local — jeder Node sichert
-- seinen eigenen State).

CREATE TABLE IF NOT EXISTS backups (
    id              BIGSERIAL PRIMARY KEY,
    file            TEXT NOT NULL,         -- Basename, z.B. eg-20260512-153045.tar.gz
    size_bytes      BIGINT NOT NULL,
    sha256          TEXT NOT NULL,
    db_dump_bytes   BIGINT NOT NULL DEFAULT 0,
    files_bytes     BIGINT NOT NULL DEFAULT 0,
    kind            TEXT NOT NULL,         -- manual | scheduled
    status          TEXT NOT NULL,         -- success | failed
    error           TEXT,                  -- gesetzt bei failed
    host            TEXT,                  -- hostname der Box (für Cluster-Sicht später)
    started_at      TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    finished_at     TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    CONSTRAINT backups_file_unique  UNIQUE (file),
    CONSTRAINT backups_kind_check   CHECK (kind   IN ('manual', 'scheduled')),
    CONSTRAINT backups_status_check CHECK (status IN ('success', 'failed'))
);

CREATE INDEX IF NOT EXISTS idx_backups_started ON backups (started_at DESC);
CREATE INDEX IF NOT EXISTS idx_backups_status  ON backups (status);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS backups;
-- +goose StatementEnd
