-- 0030_erp_sync_runs.sql
--
-- Dokumentation der ERP-Import-Läufe (Sync mit ERPframe). Jeder Lauf — egal ob
-- vom täglichen Scheduler, vom Startup-Catch-up oder manuell über den
-- Admin-Endpunkt (`POST /admin/import-erp`) — hinterlässt hier eine Zeile.
-- Zweck: Audit/Nachvollziehbarkeit ("wann wurde für welches Tourdatum gesynct,
-- mit welchem Ergebnis").
--
-- Zusätzlich Grundlage für den Startup-Catch-up: beim Serverstart (Erststart
-- ODER nach längerer Unterbrechung, wenn der Cron-Zeitpunkt verpasst wurde)
-- prüft das Backend, ob für das Zieldatum (morgen) bereits ein ERFOLGREICHER
-- Lauf dokumentiert ist — wenn nicht, synct es nach.

CREATE TABLE erp_sync_runs (
    id                  uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    -- Tourdatum, für das gesynct wurde (NICHT der Zeitpunkt des Laufs).
    target_date         date NOT NULL,
    -- Auslöser: 'scheduler' | 'startup' | 'manual'.
    trigger             text NOT NULL,
    -- true = Lauf lief durch (ERP gelesen + verarbeitet); ein einzelner
    -- fehlerhafter Beleg (tours_failed > 0) zählt weiterhin als erfolgreicher
    -- Lauf. false = Lauf komplett gescheitert (z. B. ERP nicht erreichbar),
    -- dann ist `error` gesetzt.
    success             boolean NOT NULL,
    tours_total         integer NOT NULL DEFAULT 0,
    tours_ok            integer NOT NULL DEFAULT 0,
    tours_failed        integer NOT NULL DEFAULT 0,
    drivers_provisioned integer NOT NULL DEFAULT 0,
    error               text,
    created_at          timestamptz NOT NULL DEFAULT now()
);

-- Schnelle Abfrage „gibt es einen ERFOLGREICHEN Sync für Datum X?" (Catch-up).
CREATE INDEX erp_sync_runs_date_success
    ON erp_sync_runs (target_date)
    WHERE success;

-- Chronologische Sicht fürs Audit (neueste zuerst).
CREATE INDEX erp_sync_runs_created_at
    ON erp_sync_runs (created_at DESC);
