-- Migration 013 : support des abonnements et commandes manuels (hors ligne)
--
-- Objectifs :
--   1. Marquer les abos/commandes/clients/sites comme "manuels" (pas synchronisés depuis WC)
--   2. Créer une source virtuelle "Hors ligne" (sites.is_manual = 1) pour
--      regrouper tous les abos manuels sous une même favicon de filtrage
--   3. Permettre les statuts manuels (manual_pending, manual_active, manual_cancelled)
--      sans toucher aux statuts WC existants (active, pending, cancelled, expired, etc.)
--
-- Les statuts "à renouveler" et autres badges temporels seront calculés à la
-- volée dans les vues (pas stockés en BDD).

-- 1. Flag is_manual sur les tables clés
ALTER TABLE sites ADD COLUMN is_manual TINYINT(1) NOT NULL DEFAULT 0
    COMMENT 'Site virtuel pour regrouper les abos hors ligne (1 = source virtuelle)';

ALTER TABLE subscriptions ADD COLUMN is_manual TINYINT(1) NOT NULL DEFAULT 0
    COMMENT 'Abonnement créé manuellement (hors WC)';

ALTER TABLE subscriptions ADD COLUMN created_by_user_id INT UNSIGNED NULL DEFAULT NULL
    COMMENT 'User qui a créé un abo manuel (NULL pour les abos WC)';

ALTER TABLE subscriptions ADD COLUMN notes TEXT NULL DEFAULT NULL
    COMMENT 'Notes libres (cas typique : abos manuels)';

ALTER TABLE orders ADD COLUMN is_manual TINYINT(1) NOT NULL DEFAULT 0
    COMMENT 'Commande créée manuellement (hors WC)';

ALTER TABLE clients ADD COLUMN is_manual TINYINT(1) NOT NULL DEFAULT 0
    COMMENT 'Client créé manuellement (hors WC)';

-- 2. Création de la source virtuelle "Hors ligne"
-- Insertion conditionnelle pour éviter les doublons en cas de re-exécution.
-- api_key et hmac_secret sont NOT NULL UNIQUE → on génère des valeurs aléatoires
-- préfixées 'manual_' (le site virtuel ne sera jamais sollicité par un plugin).
INSERT INTO sites (
    name, url, is_manual, api_key, hmac_secret,
    tier, status, last_sync_status, health_score
)
SELECT
    'Hors ligne',
    'manual://offline',
    1,
    CONCAT('manual_', SUBSTRING(MD5(RAND()), 1, 32)),
    CONCAT('manual_', SUBSTRING(MD5(RAND()), 1, 64)),
    'free',
    'active',
    'no_data',
    0
FROM dual
WHERE NOT EXISTS (
    SELECT 1 FROM sites WHERE is_manual = 1 LIMIT 1
);
