-- ===========================================
-- Migration 009 : Enregistrement event type compte.fusionne
-- ===========================================
-- Sens unique Ecole --> QALIOPI (calque sur ebook.facture / don.recu / virement.facture).
--
-- Flux : Ecole emet --> API Centrale (bus) --> QALIOPI (consommateur)
--   - Emetteur     : Ecole. Lors d'une fusion de comptes doublons (User::mergeAccounts,
--                    #998) : un compte « maitre » absorbe un ou plusieurs comptes, qui
--                    passent inactive + merged_into_id. L'event propage la fusion pour
--                    que QALIOPI rapatrie/desactive ses enregistrements clients lies.
--   - Consommateur : QALIOPI, via son CentralWebhookController : handler ajoute cote
--                    QALIOPI (en cours). Tant que le case n'existe pas, QALIOPI repond
--                    200 « type non gere » : delivery marquee delivered, pas de retry.
--
-- SECRET HMAC : depuis le correctif #1118, l'abonnement QALIOPI cree ici herite du
--   vrai secret QALIOPI (le COALESCE copie un abonnement qaliopi actif). Verifier
--   neanmoins deliveries_created == deliveries_sent au 1er envoi.
--
-- payload_schema : documentaire (NON valide par le bus), derive de User::mergeAccounts.
--   Le schema canonique cote emetteur n'est pas encore fige — a ajuster si l'Ecole
--   precise le payload.
-- ===========================================

-- -------------------------------------------
-- 1. Type d'evenement (allowlist du bus)
-- -------------------------------------------
INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('compte.fusionne',
 'Comptes doublons fusionnes cote Ecole : un maitre absorbe des comptes (emis par Ecole)',
 (SELECT id FROM apps WHERE slug = 'ecole'),
 JSON_OBJECT(
   'master_user_id',   'number  requis  id du compte maitre conserve',
   'master_email',     'string  requis  email de reference pose sur le maitre',
   'merged_user_ids',  'array<number>  requis  ids des comptes absorbes (desactives)',
   'merged_emails',    'array<string>  optionnel  emails des comptes absorbes',
   'actor_id',         'number  optionnel  admin ayant realise la fusion',
   'merged_at',        'string  optionnel  horodatage ISO8601 de la fusion'
 )
);

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

INSERT IGNORE INTO subscriptions (app_id, event_type_id, callback_url, secret) VALUES
((SELECT id FROM apps WHERE slug = 'qaliopi'),
 (SELECT id FROM event_types WHERE slug = 'compte.fusionne'),
 'https://gestion.altheaprovence.com/api/webhook/central',
 COALESCE(@qaliopi_secret, 'CHANGE_ME_subscription_secret_qaliopi_64chars_0000000000000000'))
;
