-- =====================================================================
--  TeeCup — sekundær, verifisert e-postadresse per konto (migrasjon 017)
-- =====================================================================
--  Oppfølging av ADR-032 (verifisert e-postbytte), reist av brukeren rett
--  etterpå: én person kan ha flere e-postadresser i omløp samtidig (privat
--  vs. jobb-adresse en organisator har lagt inn en spiller/invitasjon på).
--  Dette dekker BEVISST kun det enkle tilfellet -- en FRI, ukrevd adresse
--  legges til og verifiseres. Ekte konto-SAMMENSLÅING (adressen tilhører
--  allerede en annen, eksisterende konto) er en egen, større, separat sak
--  (se FEATURE_BACKLOG.md "Én person, flere e-postadresser") og håndheves
--  IKKE her -- unikheten under garanterer at en adresse aldri kan stå som
--  sekundær på to kontoer samtidig (samme rad ville krevd en eksplisitt
--  sammenslåingsbeslutning som ikke finnes ennå).
--
--  To tabeller, samme token-hash-og-utløp-mønster som email_change_token
--  (016): en midlertidig verifiseringstoken (bevis eierskap FØR raden
--  faktisk opprettes -- unngår en "krevd men aldri bekreftet"-adresse som
--  likevel opptar en unik plass), og selve den verifiserte adressen.
-- =====================================================================

\set ON_ERROR_STOP on

CREATE TABLE secondary_email_token (
    id          uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id     uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    email       citext NOT NULL,
    token_hash  text NOT NULL UNIQUE,
    expires_at  timestamptz NOT NULL,
    consumed_at timestamptz,
    created_at  timestamptz NOT NULL DEFAULT now()
);

CREATE INDEX ON secondary_email_token (user_id);

CREATE TABLE user_secondary_email (
    id         uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id    uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    -- Globalt unik -- kan aldri stå som sekundær på to kontoer samtidig,
    -- og aldri samtidig være en ANNEN kontos primære e-post (håndhevet i
    -- app-laget ved innsetting, se app/routers/auth.py -- en ren DB-CHECK
    -- på tvers av to tabeller er ikke mulig i Postgres).
    email      citext NOT NULL UNIQUE,
    created_at timestamptz NOT NULL DEFAULT now()
);

CREATE INDEX ON user_secondary_email (user_id);

GRANT SELECT, INSERT, UPDATE, DELETE ON secondary_email_token TO teecup_app;
GRANT SELECT, INSERT, DELETE ON user_secondary_email TO teecup_app;
