-- +goose Up
-- +goose StatementBegin

-- Static routes — managed durch EdgeGuard, geschrieben in
-- /etc/edgeguard/routes.conf und appliziert via `ip route … proto
-- edgeguard`. Markierung mit Protocol-ID 250 (in der apply-script
-- gemappt) damit der Operator manuell-gesetzte Routen im Kernel
-- erkennt und nicht beim flush wegradiert.
--
-- destination: CIDR ("10.0.5.0/24" oder "0.0.0.0/0").
-- gateway:     IPv4/v6 oder NULL (für on-link via dev).
-- dev:         interface name (optional; bei Gateway-only kann ip das
--              selbst auflösen, aber explizit ist besser).
-- metric:      Priorität — niedriger gewinnt (default 100).
-- table:       routing table name oder "main" (default).

CREATE TABLE IF NOT EXISTS static_routes (
    id          BIGSERIAL PRIMARY KEY,
    destination TEXT NOT NULL,
    gateway     TEXT,
    dev         TEXT,
    metric      INTEGER NOT NULL DEFAULT 100,
    table_name  TEXT NOT NULL DEFAULT 'main',
    active      BOOLEAN NOT NULL DEFAULT TRUE,
    comment     TEXT,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    CONSTRAINT static_routes_metric_check CHECK (metric >= 0 AND metric <= 65535)
);

CREATE INDEX IF NOT EXISTS idx_static_routes_active ON static_routes (active) WHERE active;
CREATE INDEX IF NOT EXISTS idx_static_routes_dest   ON static_routes (destination);

-- +goose StatementEnd

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