-- ===========================================
-- Migration 008 : Enregistrement des event types ebook.achat / ebook.facture
-- ===========================================
-- Ticket #1147 (QALIOPI) : un virement recu peut etre un ACHAT EBOOK. Flux
-- strictement calque sur don.* (#1146, migration 007) et virement.* (005/006).
-- L'Ecole cree le paiement (succeeded, sans Stripe), livre l'ebook si
-- `livraison_auto`, emet une FACTURE COMMERCIALE (TVA 5,5 %) puis renvoie le retour.
--
-- Contrat dedie sur le bus (2 sens) :
--   - ebook.achat   : QALIOPI emet --> bus --> Ecole (consommateur)
--   - ebook.facture : Ecole  emet --> bus --> QALIOPI (consommateur)
--
-- Emetteurs / consommateurs deja en place (verifies 25/06/2026) :
--   - QALIOPI VirementsController -> publishEvent('ebook.achat')
--   - QALIOPI CentralWebhookController case 'ebook.facture' -> handleEbookFacture()
--   - Ecole   CentralWebhookController case 'ebook.achat'   -> handler (#1147)
--                                       + emission du retour 'ebook.facture'
--
-- SECRET HMAC : depuis le correctif #1118 (25/06/2026), TOUS les abonnements
--   `ecole` portent le vrai ECOLE_WEBHOOK_SECRET (plus de placeholder CHANGE_ME).
--   La subscription Ecole creee ici en herite donc directement (le COALESCE copie
--   un abonnement ecole actif, tous corrects desormais). Idem QALIOPI (vrai secret
--   en prod). Aucune action secret supplementaire requise — verifier neanmoins
--   deliveries_created == deliveries_sent au 1er envoi.
--
-- payload_schema : documentaire (NON valide par le bus). Source : QALIOPI
--   VirementsController::publishEvent('ebook.achat') et docs virement-facturation.md.
-- ===========================================

-- -------------------------------------------
-- 1. Types d'evenements (allowlist du bus)
-- -------------------------------------------
INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('ebook.achat',
 'Achat ebook confirme a transmettre a l Ecole (paiement + livraison + facture) (emis par QALIOPI)',
 (SELECT id FROM apps WHERE slug = 'qaliopi'),
 JSON_OBJECT(
   'allocation_ref', 'string  requis  ref de la ligne (virement-{id})',
   'virement_id',    'number  requis  id du virement QALIOPI',
   'date_achat',     'string  requis  date de l achat (YYYY-MM-DD)',
   'montant_ttc',    'number  requis  montant TTC',
   'devise',         'string  requis  code devise (EUR)',
   'mode',           'string  requis  mode de versement (virement)',
   'produit',        'object  requis  { wc_product_id }',
   'acheteur',       'object  requis  type/email/nom/prenom/adresse/code_postal/ville/pays + raison_sociale/siret si morale',
   'livraison_auto', 'bool    requis  true = livrer l ebook automatiquement',
   'statut',         'string  requis  confirme'
 )
);

INSERT IGNORE INTO event_types (slug, description, source_app_id, payload_schema) VALUES
('ebook.facture',
 'Facture commerciale d un achat ebook emise par l Ecole, en retour vers QALIOPI',
 (SELECT id FROM apps WHERE slug = 'ecole'),
 JSON_OBJECT(
   'allocation_ref', 'string  requis  ref de la ligne (virement-{id})',
   'facture_ref',    'string  requis  reference de la facture commerciale',
   'facture_date',   'string  requis  date d emission (YYYY-MM-DD)',
   'montant_ttc',    'number  requis  montant TTC facture (TVA 5,5 %)',
   'facture_pdf_url','string  optionnel  lien de telechargement de la facture (Ecole)'
 )
);

-- -------------------------------------------
-- 2. Subscription : Ecole consomme ebook.achat
--    (secret repris d'un abonnement Ecole actif — tous corrects depuis #1118)
-- -------------------------------------------
SET @ecole_secret := (
  SELECT s.secret
  FROM subscriptions s
  JOIN apps a ON a.id = s.app_id
  WHERE a.slug = 'ecole' 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 = 'ecole'),
 (SELECT id FROM event_types WHERE slug = 'ebook.achat'),
 'https://ecole.altheaprovence.com/api/webhook/central',
 COALESCE(@ecole_secret, 'CHANGE_ME_subscription_secret_ecole_64chars_00000000000000000'))
;

-- -------------------------------------------
-- 3. Subscription : QALIOPI consomme ebook.facture (retour)
--    (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 = 'ebook.facture'),
 'https://gestion.altheaprovence.com/api/webhook/central',
 COALESCE(@qaliopi_secret, 'CHANGE_ME_subscription_secret_qaliopi_64chars_0000000000000000'))
;
