-- Admin Moderation Queue — Phase E
-- Erweitert CommunityPost / CommunityReply um Moderation-Felder und legt
-- moderation_actions-Audit-Tabelle an.
--
-- Reported-Marker:
--   isModerated=true  → in /api/admin/moderation/queue gelistet
--   Dismiss           → isModerated=false (Flag clear)
--   Delete            → content="", isDeleted=true, isModerated bleibt true
--                       (für audit / spätere Re-Review)
--
-- Audit-Trail (DSGVO):
--   Jede Aktion (dismiss / delete / ban_user) schreibt einen ModerationAction-
--   Eintrag inkl. content-snapshot. Reporter-Info wird nicht persistiert
--   (anonymous report-flow per Convention).
--
-- Drift-Hinweis: Diese Migration wird via `pnpm prisma migrate deploy` auf
-- staging-/prod-DB gefahren. Lokal NICHT ausführen. Falls Drift erkannt wird:
--   pnpm prisma migrate resolve --applied 20260509_moderation_queue

-- ─── community_posts: Moderation-Felder ──────────────────────────────────────
ALTER TABLE "rebreak"."community_posts"
    ADD COLUMN IF NOT EXISTS "is_deleted"   BOOLEAN      NOT NULL DEFAULT false,
    ADD COLUMN IF NOT EXISTS "deleted_at"   TIMESTAMP(3),
    ADD COLUMN IF NOT EXISTS "reported_at"  TIMESTAMP(3);

CREATE INDEX IF NOT EXISTS "community_posts_is_moderated_reported_at_idx"
    ON "rebreak"."community_posts" ("is_moderated", "reported_at");

-- ─── community_replies: Moderation-Felder ────────────────────────────────────
ALTER TABLE "rebreak"."community_replies"
    ADD COLUMN IF NOT EXISTS "is_moderated" BOOLEAN      NOT NULL DEFAULT false,
    ADD COLUMN IF NOT EXISTS "is_deleted"   BOOLEAN      NOT NULL DEFAULT false,
    ADD COLUMN IF NOT EXISTS "deleted_at"   TIMESTAMP(3),
    ADD COLUMN IF NOT EXISTS "reported_at"  TIMESTAMP(3);

CREATE INDEX IF NOT EXISTS "community_replies_is_moderated_reported_at_idx"
    ON "rebreak"."community_replies" ("is_moderated", "reported_at");

-- ─── moderation_actions: Audit-Log ───────────────────────────────────────────
CREATE TABLE IF NOT EXISTS "rebreak"."moderation_actions" (
    "id"               UUID         NOT NULL DEFAULT gen_random_uuid(),
    "target_type"      TEXT         NOT NULL,
    "target_id"        UUID         NOT NULL,
    "action"           TEXT         NOT NULL,
    "admin_user_id"    UUID,
    "content_snapshot" TEXT,
    "reason"           TEXT,
    "created_at"       TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

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

CREATE INDEX IF NOT EXISTS "moderation_actions_target_idx"
    ON "rebreak"."moderation_actions" ("target_type", "target_id");
CREATE INDEX IF NOT EXISTS "moderation_actions_created_at_idx"
    ON "rebreak"."moderation_actions" ("created_at");
