-- Migration v2 routing Teams : multi-match (fan-out), serveurs DB, référents additionnels
--   - teams_channel_rules.match_is_database_server : nouvelle condition (matcher uniquement les DB)
--   - servers.is_database_server : flag manuel (default false)
--   - server_additional_referents : table additive pour multi-référents par serveur (cas DB Nadine+Cedric)
-- Le moteur de résolution passe en mode "toutes les règles qui matchent contribuent" (cf code service).
-- Idempotent.

-- ─── 1) Condition is_database_server sur les règles ───────────

ALTER TABLE public.teams_channel_rules
    ADD COLUMN IF NOT EXISTS match_is_database_server boolean;
    -- NULL = pas de filtre ; true = ne matcher que les DB ; false = ne matcher que les non-DB

-- ─── 2) Flag is_database_server sur servers ───────────────────

ALTER TABLE public.servers
    ADD COLUMN IF NOT EXISTS is_database_server boolean NOT NULL DEFAULT false;

CREATE INDEX IF NOT EXISTS idx_servers_is_db
    ON public.servers(is_database_server)
    WHERE is_database_server = true;

-- ─── 3) Référents additionnels (multi-référents) ──────────────

CREATE TABLE IF NOT EXISTS public.server_additional_referents (
    server_id  integer NOT NULL REFERENCES public.servers(id) ON DELETE CASCADE,
    contact_id integer NOT NULL REFERENCES public.contacts(id) ON DELETE CASCADE,
    role       text NOT NULL DEFAULT 'referent_technique',
        -- 'referent_technique' (par défaut) | extensible (DBA, sécu, ...)
    created_at timestamptz NOT NULL DEFAULT now(),
    PRIMARY KEY (server_id, contact_id, role)
);

CREATE INDEX IF NOT EXISTS idx_server_additional_referents_contact
    ON public.server_additional_referents(contact_id);

-- ─── 4) GRANTs ────────────────────────────────────────────────

GRANT SELECT, INSERT, UPDATE, DELETE ON public.server_additional_referents TO patchcenter;
