-- Migration: 20260516_custom_domain_type
--
-- Erweitert user_custom_domains um das `type`-Feld.
-- Drei erlaubte Typen:
--   'web'               — Web-Domain-Block (bisheriges Verhalten, Default)
--   'mail_domain'       — Sender-Domain-Block im Mail-Filter (analog web, nutzt Domain-Match-Layer)
--   'mail_display_name' — Sender-Display-Name-Pattern-Block (Substring-Match, case-insensitive)
--
-- Slot-Pool: alle drei Types teilen den gleichen Slot-Pool pro Plan
--   (Free: 5, Pro: 5, Legend: 10 — countActiveCustomDomains() zählt alle Types zusammen).
--
-- DSGVO-Hinweis:
--   Display-Name-Patterns (type='mail_display_name') sind reine Heuristik-Patterns
--   die vom User selbst eingetragen werden (z.B. "EXTRASPIN").
--   Sie gelten NICHT als personenbezogene Daten (Art. 4 DSGVO) —
--   es handelt sich um selbst-definierte Schlagworte, nicht um identifizierbare PII.
--   Die Patterns unterliegen dennoch Art. 17 DSGVO (Löschrecht via CASCADE userId).
--
-- Non-breaking: alle existierenden Rows erhalten type='web' als Default.

ALTER TABLE rebreak.user_custom_domains
    ADD COLUMN IF NOT EXISTS type TEXT NOT NULL DEFAULT 'web';

ALTER TABLE rebreak.user_custom_domains
    ADD CONSTRAINT user_custom_domains_type_check
    CHECK (type IN ('web', 'mail_domain', 'mail_display_name'));

-- Index für effiziente type-basierte Abfragen pro User
-- (getCustomMailDisplayNames läuft bei jedem Mail-Scan)
CREATE INDEX IF NOT EXISTS user_custom_domains_user_type_idx
    ON rebreak.user_custom_domains (user_id, type);
