-- LyraMemory — strukturierte persistente User-Erinnerungen für den Lyra-Coach.
-- Art-9-Gesundheitsdaten (Glücksspielkontext): strenge RLS, nur service-role schreibt.
--
-- Deploy: pnpm prisma migrate deploy (auf Hetzner)

-- CreateEnum
CREATE TYPE "rebreak"."LyraMemoryType" AS ENUM (
    'trigger',
    'habit',
    'strength',
    'relationship',
    'milestone',
    'pain_point',
    'goal',
    'preference'
);

-- CreateTable
CREATE TABLE IF NOT EXISTS "rebreak"."lyra_memories" (
    "id"                   UUID        NOT NULL DEFAULT gen_random_uuid(),
    "user_id"              UUID        NOT NULL,
    "type"                 "rebreak"."LyraMemoryType" NOT NULL,
    "content"              VARCHAR(500) NOT NULL,
    "confidence"           DOUBLE PRECISION NOT NULL DEFAULT 0.7,
    "source"               TEXT,
    "created_at"           TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    "updated_at"           TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    "last_referenced_at"   TIMESTAMPTZ,

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

-- CreateIndex
CREATE INDEX IF NOT EXISTS "lyra_memories_user_id_type_idx"
    ON "rebreak"."lyra_memories" ("user_id", "type");

-- EnableRLS
ALTER TABLE "rebreak"."lyra_memories" ENABLE ROW LEVEL SECURITY;

-- Policy: User kann eigene Memories lesen (vorbereitet für künftiges User-UI)
CREATE POLICY "lyra_memories: own read"
    ON "rebreak"."lyra_memories"
    FOR SELECT
    USING (auth.uid() = "user_id");

-- Policy: Service-Role darf alles (Auto-Extraction + Cleanup)
-- Hinweis: Supabase service_role bypassed RLS automatisch wenn
-- die Verbindung mit service_role JWT erfolgt — diese Policy ist
-- ein explizites Fallback für Tools die das nicht tun.
CREATE POLICY "lyra_memories: service all"
    ON "rebreak"."lyra_memories"
    USING (auth.role() = 'service_role')
    WITH CHECK (auth.role() = 'service_role');
