-- Konkurranseklasser (2026-08-03) -- organisator kan opprette fritt navngitte
-- klasser (f.eks. "Damer", "Herrer A", "Junior") med et valgfritt
-- standardutslag, og knytte deltakere til en klasse. Delt mellom begge
-- turneringstyper (samme `tournament`-tabell, ADR-037s format_type-mønster)
-- -- én tabell dekker begge, i stedet for to duplikat-tabeller.
--
-- Brukt til (bekreftet med bruker FØR bygging):
-- 1. Forhåndsutfylle riktig utslag når en spiller legges til en match/runde
--    (BÅDE lagturneringer og individuelle turneringer) -- ren frontend-
--    bekvemmelighet, tee_id forblir required og eksplisitt i API-kontrakten.
-- 2. Egen resultatliste per klasse -- KUN i individuelle turneringer
--    (ADR-037, flatt felt). I lagturneringer (ADR-011, to lag) er poeng
--    knyttet til hele kamper, ikke enkeltspillere -- klasse er der bevisst
--    KUN et utslag-forslag, ingen egen leaderboard-splitting.
CREATE TABLE tournament_class (
    id              uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    organization_id uuid NOT NULL,
    tournament_id   uuid NOT NULL,
    name            text NOT NULL,
    default_tee_id  uuid,
    created_at      timestamptz NOT NULL DEFAULT now(),
    FOREIGN KEY (organization_id, tournament_id) REFERENCES tournament (organization_id, id) ON DELETE CASCADE,
    FOREIGN KEY (default_tee_id) REFERENCES tee (id) ON DELETE RESTRICT,
    UNIQUE (tournament_id, name)
);
CREATE INDEX ON tournament_class (organization_id, tournament_id);

-- Nullable -- en klasse er valgfri, og sletter man en klasse skal ikke
-- roster-/deltaker-radene forsvinne (samme SET NULL-prinsipp som
-- tournament_round_bbb_hole, migrasjon 044).
ALTER TABLE team_roster
    ADD COLUMN class_id uuid REFERENCES tournament_class (id) ON DELETE SET NULL;
ALTER TABLE tournament_participant
    ADD COLUMN class_id uuid REFERENCES tournament_class (id) ON DELETE SET NULL;

-- Row-Level Security (samme org_isolation-policy-mønster som migrasjon 040).
ALTER TABLE tournament_class ENABLE ROW LEVEL SECURITY;
ALTER TABLE tournament_class FORCE  ROW LEVEL SECURITY;
CREATE POLICY org_isolation ON tournament_class
    USING       (organization_id = current_setting('app.current_org', true)::uuid)
    WITH CHECK  (organization_id = current_setting('app.current_org', true)::uuid);
