-- ===========================================
-- Migration 013 : Enregistrement event type formateur.niveau_modifie
-- ===========================================
-- Ticket Manager #1889 (decision de Christophe du 03/10/2026) : deux niveaux de formateurs.
-- Sens unique Ecole --> LMS (calque sur 010 compte.email_modifie).
--
-- Flux : Ecole emet --> API Centrale (bus) --> LMS (consommateur)
--   - Emetteur     : Ecole, NiveauFormateur::publier, a la creation d un formateur associe
--                    et a chaque changement de niveau dans Dossiers formateurs.
--   - Consommateur : LMS, WebhookHandlerService::handleFormateurNiveauModifie : associe =
--                    lms_users.lecture_equipe (il lit toutes les formations publiees, par une
--                    inscription d apercu), intervenant = lecture fermee, apercus annules.
--   - QALIOPI n est PAS abonne.
--
-- 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 NiveauFormateur::publier.
-- ===========================================

-- -------------------------------------------
-- 1. Type d evenement (allowlist du bus)
-- -------------------------------------------
INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('formateur.niveau_modifie',
 'Niveau d un formateur pose ou change cote Ecole : associe ou intervenant (emis par Ecole)',
 (SELECT id FROM apps WHERE slug = 'ecole'),
 JSON_OBJECT(
   'ecole_user_id',   'number  requis  id Ecole du formateur',
   'email',           'string  requis  adresse du compte',
   'niveau',          'string  requis  associe | intervenant',
   'identite',        'object  optionnel  {prenom, nom}',
   'date_changement', 'string  optionnel  horodatage ISO8601'
 )
);

-- -------------------------------------------
-- 2. Subscription : le LMS consomme formateur.niveau_modifie
-- -------------------------------------------
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 = 'formateur.niveau_modifie'),
       'https://formations.altheaprovence.com/api/webhooks/central',
       @lms_secret
FROM DUAL
WHERE @lms_secret IS NOT NULL
  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 = 'formateur.niveau_modifie')
  );
