-- ===========================================
-- Migration 010 : Enregistrement event type compte.email_modifie
-- ===========================================
-- Sens unique Ecole --> LMS (calque sur 009 compte.fusionne).
--
-- Flux : Ecole emet --> API Centrale (bus) --> LMS (consommateur)
--   - Emetteur     : Ecole, EmailChange::prevenirLeBusCentral, a chaque changement
--                    d'adresse fait par le SAV. L'Ecole publiait deja cet evenement, mais
--                    le bus le refusait (« Type d'evenement inconnu ») : rien ne partait.
--                    Aucun changement de code cote Ecole, l'appel passe tel quel.
--   - Consommateur : LMS, WebhookHandlerService::handleCompteEmailModifie (commit f1c4752,
--                    23/09/2026). Le login SSO rapproche le compte LMS par email : sans cet
--                    evenement, l'eleve connecte avec sa nouvelle adresse arrivait sur un
--                    compte LMS vide. Le LMS retrouve le compte par l'id Ecole
--                    (user_id_principal) et lui pose la nouvelle adresse.
--   - QALIOPI n'est PAS abonne (inchange pour lui).
--
-- SECRET HMAC : repris d'un abonnement LMS actif (meme secret pour toutes les
--   livraisons vers le LMS). Verifier la premiere livraison en HTTP 200.
--
-- payload_schema : documentaire (NON valide par le bus), relu sur EmailChange.php.
-- ===========================================

-- -------------------------------------------
-- 1. Type d'evenement (allowlist du bus)
-- -------------------------------------------
INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('compte.email_modifie',
 'Adresse email d un compte changee cote Ecole par le SAV (emis par Ecole)',
 (SELECT id FROM apps WHERE slug = 'ecole'),
 JSON_OBJECT(
   'user_id_principal', 'number  requis  id Ecole du compte',
   'email_principal',   'string  requis  nouvelle adresse',
   'emails_fusionnes',  'array<string>  requis  ancienne(s) adresse(s)',
   'identite',          'object  optionnel  {prenom, nom}',
   'date_changement',   'string  optionnel  horodatage ISO8601'
 )
);

-- -------------------------------------------
-- 2. Subscription : le LMS consomme compte.email_modifie
--    (secret repris d'un abonnement LMS actif — vrai secret en prod)
-- -------------------------------------------
SET @lms_secret := (
  SELECT s.secret
  FROM subscriptions s
  JOIN apps a ON a.id = s.app_id
  WHERE a.slug = 'lms' AND s.is_active = 1
  ORDER BY s.id
  LIMIT 1
);

INSERT IGNORE INTO subscriptions (app_id, event_type_id, callback_url, secret)
SELECT (SELECT id FROM apps WHERE slug = 'lms'),
       (SELECT id FROM event_types WHERE slug = 'compte.email_modifie'),
       'https://formations.altheaprovence.com/api/webhooks/central',
       @lms_secret
FROM DUAL
WHERE @lms_secret IS NOT NULL
  -- Rejouable : pas de second abonnement si la migration repasse.
  AND NOT EXISTS (
    SELECT 1 FROM subscriptions s2
    WHERE s2.app_id = (SELECT id FROM apps WHERE slug = 'lms')
      AND s2.event_type_id = (SELECT id FROM event_types WHERE slug = 'compte.email_modifie')
  );
