-- =====================================================================
--  TeeCup — kontosammenslåing, "Del 2" av flere-e-postadresser (migrasjon 077)
-- =====================================================================
--  Oppfølging av ADR-032/migrasjon 017 (sekundær e-post) -- "Del 1" dekket
--  KUN det enkle tilfellet (fri, ukrevd adresse). Del 2: hva skjer når
--  adressen som legges til ALLEREDE er en annen, eksisterende kontos
--  primær- eller sekundæradresse -- samme reelle person har endt opp med
--  to separate TeeCup-kontoer. Selvbetjent (bruker bekreftet eksplisitt).
--
--  Samme token-hash-og-utløp-mønster som magic_link_token (004) ->
--  email_change_token (016) -> secondary_email_token (017): bevis
--  eierskap av MÅL-kontoens e-post FØR selve sammenslåingen utføres.
--  Lenken sendes til MÅL-kontoens (taperens) e-post -- beviser eierskap av
--  DEN kontoen, ikke bare at initiativtakeren (keeperen) fortsatt er
--  innlogget, samme prinsipp som ADR-032 Beslutning B.
--
--  `initiator_user_id`/`target_user_id` er BEVISST asymmetriske roller,
--  ikke to likeverdige parter: initiator (keeper) er den som ber om
--  sammenslåingen fra en aktiv økt, target (taper) er kontoen som slås
--  INN i keeperen og til slutt slettes (se app/account_merge.py -- ingen
--  sesjons-tilbakekallingsmekanisme finnes i denne appen, sletting av
--  app_user-raden er eneste måte å tvinge ut en gjenlevende
--  øktinformasjonskapsel for taper-kontoen).
-- =====================================================================

\set ON_ERROR_STOP on

CREATE TABLE account_merge_token (
    id                 uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    initiator_user_id  uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    target_user_id     uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    token_hash         text NOT NULL UNIQUE,
    expires_at         timestamptz NOT NULL,
    consumed_at        timestamptz,
    created_at         timestamptz NOT NULL DEFAULT now(),
    CHECK (initiator_user_id <> target_user_id)
);

CREATE INDEX ON account_merge_token (initiator_user_id);
CREATE INDEX ON account_merge_token (target_user_id);

GRANT SELECT, INSERT, UPDATE ON account_merge_token TO teecup_app;
