-- ==========================================================
-- 06_validations_enrich.sql : Traçabilité complète des validations
-- - Ajoute la colonne 'valide_par' (FK -> utilisateurs.id)
-- - ON DELETE SET NULL pour conserver l'historique
-- - Ajoute index utiles pour les requêtes (valideur, statut, date)
-- A exécuter après : 01_init.sql, 02_indexes.sql, 03_checks.sql, 04_fk_policies.sql, 05_triggers.sql
-- ==========================================================

BEGIN;

-- 1) Colonne 'valide_par' si absente
ALTER TABLE validations
  ADD COLUMN IF NOT EXISTS valide_par UUID NULL;

-- 2) FK vers utilisateurs(id), ON DELETE SET NULL
DO $$
DECLARE conname text;
BEGIN
  SELECT tc.constraint_name INTO conname
  FROM information_schema.table_constraints tc
  JOIN information_schema.key_column_usage kcu
    ON tc.constraint_name = kcu.constraint_name
   AND tc.table_schema    = kcu.table_schema
  WHERE tc.table_schema   = 'public'
    AND tc.table_name     = 'validations'
    AND tc.constraint_type= 'FOREIGN KEY'
    AND kcu.column_name   = 'valide_par';

  IF conname IS NOT NULL THEN
    EXECUTE format('ALTER TABLE public.validations DROP CONSTRAINT %I', conname);
  END IF;

  EXECUTE $sql$
    ALTER TABLE public.validations
    ADD CONSTRAINT fk_validations_valide_par
    FOREIGN KEY (valide_par) REFERENCES public.utilisateurs(id) ON DELETE SET NULL
  $sql$;
END $$;

-- 3) Index pour accélérer les recherches
--    - qui a validé quoi récemment ?
--    - toutes les validations par statut / par date
CREATE INDEX IF NOT EXISTS idx_validations_valide_par_cree_le
  ON validations (valide_par, cree_le);

-- Certains existent peut-être déjà : on sécurise
CREATE INDEX IF NOT EXISTS idx_validations_id_utilisateur_cree_le
  ON validations (id_utilisateur, cree_le);

CREATE INDEX IF NOT EXISTS idx_validations_statut
  ON validations (statut);

COMMIT;
