-- ===========================================
-- Migration 014 : Enregistrement event type questionnaire.a_chaud_etat
-- ===========================================
-- Ticket Manager #2183 : rappeler le questionnaire a chaud a remplir sur le tableau de bord du
-- LMS (condition du certificat), sans aucun email. Sens unique Ecole --> LMS (calque sur 013).
--
-- Flux : Ecole emet --> API Centrale (bus) --> LMS (consommateur)
--   - Emetteur     : Ecole, Questionnaire\EtatAChaudLms : a l envoi d un a chaud, a chaque
--                    changement de statut (rempli, abandonne) et par le rattrapage
--                    scripts/publier-etat-a-chaud-lms.php. Etat complet, pas un delta.
--   - Consommateur : LMS, WebhookHandlerService::handleQuestionnaireAChaudEtat : recopie le
--                    jeton sur lms_enrollments.questionnaire_a_chaud_jeton (NULL = rien a remplir).
--   - QALIOPI n est PAS abonne (il recoit deja questionnaire.completed).
--
-- 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 EtatAChaudLms::charge.
-- ===========================================

-- -------------------------------------------
-- 1. Type d evenement (allowlist du bus)
-- -------------------------------------------
INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('questionnaire.a_chaud_etat',
 'Etat du questionnaire a chaud d un eleve pour une formation : jeton a remplir ou null (emis par Ecole)',
 (SELECT id FROM apps WHERE slug = 'ecole'),
 JSON_OBJECT(
   'ecole_user_id',      'number  requis  id Ecole de l eleve',
   'ecole_formation_id', 'number  requis  id Ecole de la formation',
   'inscription_id',     'number  optionnel  inscription Ecole (absente pour certaines reponses)',
   'jeton',              'string|null  requis  jeton du lien public /questionnaire/{jeton}, null si rien a remplir',
   'emis_le',            'string  requis  horodatage ISO8601 de la lecture en base'
 )
);

-- -------------------------------------------
-- 2. Subscription : le LMS consomme questionnaire.a_chaud_etat
-- -------------------------------------------
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 = 'questionnaire.a_chaud_etat'),
       '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 = 'questionnaire.a_chaud_etat')
  );
