-- ============================================================
-- 02_indexes.sql — Indexes pour améliorer les perfs
-- ============================================================

-- ===========================================
-- Messages (par dossier + tri par date)
-- Utilisé dans verify.sql (EXPLAIN + ORDER BY cree_le)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_messages_id_dossier_cree_le
    ON messages (id_dossier, cree_le DESC);

-- ===========================================
-- Evenements (filtrés par enfant + date)
-- Utilisé dans verify.sql (WHERE id_enfant AND date_debut >= ...)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_evenements_id_enfant_date_debut
    ON evenements (id_enfant, date_debut DESC);

-- ===========================================
-- Notifications (par utilisateur + lues/non lues + tri par date)
-- Utilisé dans verify.sql (WHERE id_utilisateur AND lu=false ORDER BY cree_le DESC)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_notifications_user_lu_cree_le
    ON notifications (id_utilisateur, lu, cree_le DESC);

-- ===========================================
-- Dossiers (filtrés par parent + enfant + statut + tri par date)
-- Utilisé dans verify.sql
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_dossiers_id_parent_enfant_statut_cree_le
    ON dossiers (id_parent, id_enfant, statut, cree_le DESC);

-- ===========================================
-- Contrats (lookup par dossier unique)
-- ===========================================
CREATE UNIQUE INDEX IF NOT EXISTS idx_contrats_id_dossier
    ON contrats (id_dossier);

-- ===========================================
-- JSONB indexes (si filtres fréquents sur planning/planning_souhaite)
-- Exemple dans verify.sql : dossiers.planning_souhaite @> ...
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_dossiers_planning_souhaite_gin
    ON dossiers USING gin (planning_souhaite jsonb_path_ops);

CREATE INDEX IF NOT EXISTS idx_contrats_planning_gin
    ON contrats USING gin (planning jsonb_path_ops);

-- ===========================================
-- Sanity check : validation des emails uniques
-- Déjà couvert par UNIQUE dans la table utilisateurs
-- ===========================================

-- ===========================================
-- Bonus : accélérer les jointures fréquentes
-- (utilisateurs.id, enfants.id, parents.id_utilisateur sont PK → déjà indexées automatiquement)
-- ===========================================
