-- Venner-kjernen (ADR-036, fase 1), 2026-07-25.
--
-- Gjensidig vennskap (forespørsel/aksept, samme grunnmønster som
-- organisasjon-invitasjoner) + en PRIVAT, ENSIDIG kategorisering i et fast
-- sett grupper -- vennen vet aldri hvilken/hvilke kategorier den andre har
-- puttet dem i (ADR-036 Beslutning A).
--
-- Ingen RLS -- samme `plain_connection()`-mønster som personlig profil/
-- HCP-historikk/frittstående runder (ADR-033 Beslutning A): autorisasjon
-- håndheves i app-laget med eksplisitt `WHERE user_id = $1`, ikke policyer.

CREATE TABLE friendship (
    id                 uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    requester_user_id  uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    addressee_user_id  uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    -- Bevisst KUN to tilstander -- en avvist/kansellert forespørsel har
    -- ingen verdi å beholde som egen rad, den slettes i stedet (se
    -- app/routers/friends.py). Et nytt forsøk oppretter da bare en ny rad.
    status             text NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'accepted')),
    created_at         timestamptz NOT NULL DEFAULT now(),
    responded_at       timestamptz,
    CHECK (requester_user_id <> addressee_user_id)
);

-- Ett vennskap PER PAR, uavhengig av hvem som ba først -- hindrer at A kan
-- be B to ganger, eller at A og B begge har en åpen forespørsel til
-- hverandre samtidig.
CREATE UNIQUE INDEX friendship_unique_pair
    ON friendship (LEAST(requester_user_id, addressee_user_id), GREATEST(requester_user_id, addressee_user_id));

CREATE INDEX friendship_requester_idx ON friendship (requester_user_id);
CREATE INDEX friendship_addressee_idx ON friendship (addressee_user_id);

-- Kategori er et FAST, ikke brukerdefinerbart sett (samme mønster som
-- BAG_CLUBS/gender/stat_level ellers i appen) -- norske visningsnavn i
-- app-laget, se ADR-036: spouse=Make, close_family=Nær familie,
-- extended_family=Storfamilie, close_friends=Nære venner,
-- golf_friends=Golfvenner, colleagues=Kollegaer, business=
-- Forretningsforbindelser, classmates=Studiekamerater, acquaintances=
-- Perifere bekjente, other=Ymse. En venn kan ha FLERE rader (flere
-- kategorier samtidig).
CREATE TABLE friend_categorization (
    owner_user_id  uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    friend_user_id uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    category       text NOT NULL CHECK (category IN (
        'spouse', 'close_family', 'extended_family', 'close_friends',
        'golf_friends', 'colleagues', 'business', 'classmates',
        'acquaintances', 'other'
    )),
    created_at     timestamptz NOT NULL DEFAULT now(),
    PRIMARY KEY (owner_user_id, friend_user_id, category)
);

CREATE INDEX friend_categorization_friend_idx ON friend_categorization (friend_user_id);

GRANT SELECT, INSERT, UPDATE, DELETE ON friendship TO teecup_app;
GRANT SELECT, INSERT, UPDATE, DELETE ON friend_categorization TO teecup_app;
