-- +goose Up
-- Single-bot collapse + per-user variant preferences.
--
-- With one Telegram bot there is no longer a "service language" (which bot a player
-- signed in through), and variant availability is no longer gated by the bot's
-- supported languages but by an explicit per-account preference. variant_preferences
-- is the set of game variants (engine.Variant stable labels) a player is willing to be
-- matched into: it gates the New Game picker and the matchmaker, while an invited friend
-- may still accept any variant. New accounts default to Erudit only (a DB-level default,
-- so no application seed is needed); the set may never be empty and must be a subset of
-- the three known variants. feedback_messages.channel_lang (the bot a message arrived
-- through) likewise loses meaning under one bot and is dropped; the sender's interface
-- language (lang) is kept.
SET search_path = backend, pg_catalog;

ALTER TABLE accounts
    ADD COLUMN variant_preferences text[] NOT NULL DEFAULT ARRAY['erudit_ru']::text[],
    ADD CONSTRAINT accounts_variant_preferences_nonempty_chk
        CHECK (cardinality(variant_preferences) >= 1),
    ADD CONSTRAINT accounts_variant_preferences_subset_chk
        CHECK (variant_preferences <@ ARRAY['scrabble_en', 'scrabble_ru', 'erudit_ru']::text[]);

ALTER TABLE accounts DROP COLUMN service_language;

ALTER TABLE feedback_messages DROP COLUMN channel_lang;

-- The auto-match pairing query filters open games by (variant, multiple_words_per_turn)
-- and takes the oldest by created_at; games_open_idx (open_deadline_at) does not serve it.
-- A partial index over open games turns the scan-and-sort into a single index seek.
CREATE INDEX games_open_match_idx ON games (variant, multiple_words_per_turn, created_at)
    WHERE status = 'open';

-- +goose Down
SET search_path = backend, pg_catalog;

DROP INDEX games_open_match_idx;

ALTER TABLE feedback_messages ADD COLUMN channel_lang text;

ALTER TABLE accounts ADD COLUMN service_language text CHECK (service_language IN ('en', 'ru'));

ALTER TABLE accounts
    DROP CONSTRAINT accounts_variant_preferences_subset_chk,
    DROP CONSTRAINT accounts_variant_preferences_nonempty_chk,
    DROP COLUMN variant_preferences;
