-- =====================================================================
--  TeeCup — rundevisibilitet for frittstående runder (migrasjon 032,
--  ADR-036 fase 2)
-- =====================================================================
--  round.visibility_mode ('public'/'private'/'friends', default 'private'
--  -- trygg standard, samme filosofi som RLS-policyenes "se ingenting" ved
--  manglende kontekst). Ved 'friends' velges EKSPLISITT hvilke av eierens
--  private kategorier (samme faste sett som friend_categorization,
--  migrasjon 025) som får se runden -- ikke "alle venner".
--
--  Styrer KUN tredjeparts innsyn (venner/offentligheten) -- en faktisk
--  lagt-til medspiller (round_participant.user_id) ser alltid runden
--  uansett visibility_mode, uendret av denne migrasjonen.
--
--  Ingen RLS, samme `plain_connection()`-mønster som resten av
--  runde-/venne-tabellene (ADR-033 Beslutning A) -- autorisasjon
--  håndheves i app-laget.
-- =====================================================================

\set ON_ERROR_STOP on

ALTER TABLE round ADD COLUMN visibility_mode text NOT NULL DEFAULT 'private'
    CHECK (visibility_mode IN ('public', 'private', 'friends'));

CREATE TABLE round_visible_category (
    round_id  uuid NOT NULL REFERENCES round(id) ON DELETE CASCADE,
    -- Samme faste kategori-sett som friend_categorization (migrasjon 025)
    -- -- bevisst duplisert CHECK fremfor en delt ENUM-type, samme
    -- pragmatiske mønster som resten av skjemaet (BAG_CLUBS/gender/
    -- stat_level m.fl. er alle CHECK-baserte, ikke ENUM).
    category  text NOT NULL CHECK (category IN (
        'spouse', 'close_family', 'extended_family', 'close_friends',
        'golf_friends', 'colleagues', 'business', 'classmates',
        'acquaintances', 'other'
    )),
    PRIMARY KEY (round_id, category)
);

GRANT SELECT, INSERT, UPDATE, DELETE ON round_visible_category TO teecup_app;
