-- =====================================================================
--  TeeCup — @-tagging av medspillere/venner i runde-feedens innlegg og
--  kommentarer, migrasjon 064 (ADR-063, reist 2026-08-11).
--
--  Egen tag-tabell per melding-type (round_message/round_message_comment),
--  ikke en delt polymorf tabell -- samme "egen tabell fremfor delt
--  polymorf konstruksjon"-konvensjon som resten av prosjektet (se
--  round_message_reaction vs. message_reaction, migrasjon 059).
--
--  start_index/end_index peker inn i `body`-teksten SLIK DEN BLE SKREVET
--  (round_message/round_message_comment er IKKE redigerbare -- kun
--  slettbare, se 058/059 -- så teksten kan aldri gå ut av synk med disse
--  offsettene i etterkant). Den viste teksten er dermed alltid nøyaktig
--  det avsenderen skrev; kun LENKEMÅLET (tagged_user_id) løses opp mot
--  brukerens NÅVÆRENDE navn ved lesing -- ikke frosset, ulikt
--  author_display_name -- fordi en tag skal peke på personen, ikke et
--  navn-øyeblikksbilde.
--
--  INGEN RLS -- samme mønster som round_message/round_message_comment selv
--  (ADR-033 Beslutning A, runder er ikke org-scopet). Autorisasjon (kun
--  faktiske relasjoner -- rundedeltakere ELLER avsenderens venner -- kan
--  tagges) håndheves i app-laget (app/routers/round_messages.py), ikke her.
-- =====================================================================
\set ON_ERROR_STOP on

CREATE TABLE round_message_tag (
    id                uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    round_message_id  uuid NOT NULL REFERENCES round_message(id) ON DELETE CASCADE,
    tagged_user_id     uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    start_index        smallint NOT NULL CHECK (start_index >= 0),
    end_index          smallint NOT NULL CHECK (end_index > start_index)
);

CREATE INDEX round_message_tag_message_idx ON round_message_tag (round_message_id);
CREATE INDEX round_message_tag_user_idx ON round_message_tag (tagged_user_id);

GRANT SELECT, INSERT, DELETE ON round_message_tag TO teecup_app;

CREATE TABLE round_message_comment_tag (
    id                        uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    round_message_comment_id  uuid NOT NULL REFERENCES round_message_comment(id) ON DELETE CASCADE,
    tagged_user_id             uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
    start_index                smallint NOT NULL CHECK (start_index >= 0),
    end_index                  smallint NOT NULL CHECK (end_index > start_index)
);

CREATE INDEX round_message_comment_tag_comment_idx ON round_message_comment_tag (round_message_comment_id);
CREATE INDEX round_message_comment_tag_user_idx ON round_message_comment_tag (tagged_user_id);

GRANT SELECT, INSERT, DELETE ON round_message_comment_tag TO teecup_app;
