-- =====================================================================
--  TeeCup — migrasjon 083
--  Cut: topp N og delt plass, etter et valgt rundenummer, manuelt anvendt
-- =====================================================================
--  Kun for individuelle turneringer (stroke_gross/stroke_net/stableford
--  -- samme sett som Augusta-resultattavlen, se ADR-*/CHANGELOG #104/112).
--  Bruker bekreftet design 2026-08-17/18: "Topp N og delt plass" (den
--  N-te plassen og alle uavgjort med den slipper gjennom), "etter et
--  bestemt rundenummer" (organisator velger selv hvilken runde cutten
--  gjelder fra), "vises i egen 'Cut'-seksjon, blokkert fra videre
--  scoring" -- og eksplisitt et MANUELT "Anvend cut"-trykk, IKKE
--  automatisk ved fullspilt runde (for å unngå at cutten slår inn for
--  tidlig mens noen fortsatt spiller den runden).
--
--  cut_after_round/cut_size er KONFIGURASJON (satt i Oppsett, kan endres
--  fritt inntil cutten faktisk anvendes). cut_applied_at er null inntil
--  organisator trykker "Anvend cut" -- selve anvendelsen er et eksplisitt
--  API-kall (`app/routers/individual_tournaments.py`) som beregner
--  stillingen etter cut_after_round og setter tournament_participant.cut
--  = true for alle UTENFOR cut_size+uavgjort-grensen. Idempotent: kan
--  trykkes på nytt (f.eks. etter en rettelse) -- regner alt på nytt fra
--  bunnen av, ikke bare inkrementelt.
--
--  tournament_participant.cut er IKKE nullable (false = fortsatt med,
--  samme "ingen regresjon for eksisterende data"-prinsipp som resten av
--  prosjektets nullable/default-valg).
-- =====================================================================

\set ON_ERROR_STOP on

ALTER TABLE tournament
    ADD COLUMN cut_after_round smallint,
    ADD COLUMN cut_size smallint CHECK (cut_size IS NULL OR cut_size > 0),
    ADD COLUMN cut_applied_at timestamptz;

ALTER TABLE tournament_participant
    ADD COLUMN cut boolean NOT NULL DEFAULT false;
