-- PDF-Berichte (Roadmap Nr. 11, SPEZIFIKATION 3.11).
--
-- Die fertige PDF-Datei wird ALS BYTES abgelegt, nicht nur ihre Definition. Grund ist der
-- Audit-Trail: Ein Bericht, den man heute erzeugt und verschickt, muss in drei Jahren
-- byte-identisch wieder herunterladbar sein -- auch wenn sich Plan, Rechenkern oder Layout
-- zwischenzeitlich geaendert haben. Eine Neuerzeugung koennte das nicht garantieren.
--
-- Der App-Container wird bei jedem Deploy neu gebaut; nur das DB-Volume ueberlebt. Deshalb
-- Postgres und nicht das Dateisystem.

CREATE TABLE "Report" (
    "id" TEXT NOT NULL,
    "planId" TEXT NOT NULL,
    "title" TEXT NOT NULL,

    -- Gewaehlte Parameter (Metrik, Quelle, Szenarien, Analysen) -- fuer die Liste und
    -- damit nachvollziehbar bleibt, wie der Bericht zustande kam.
    "config" JSONB NOT NULL DEFAULT '{}',
    -- Das eingefrorene Berichtsmodell (alle Zahlen). Erlaubt eine Zusammenfassung in der
    -- Liste, ohne das PDF zu oeffnen.
    "model" JSONB NOT NULL DEFAULT '{}',
    -- Die Datei selbst.
    "pdf" BYTEA NOT NULL,
    "pdfBytes" INTEGER NOT NULL DEFAULT 0,

    "createdById" TEXT NOT NULL,
    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "Report_pkey" PRIMARY KEY ("id")
);

CREATE INDEX "Report_planId_createdAt_idx" ON "Report"("planId", "createdAt");

ALTER TABLE "Report" ADD CONSTRAINT "Report_planId_fkey"
    FOREIGN KEY ("planId") REFERENCES "Plan"("id") ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE "Report" ADD CONSTRAINT "Report_createdById_fkey"
    FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
