-- ========================================================================
-- EXTENSION DU MEGA CATALOG POUR LES CONTRATS SPÉCIFIQUES
-- ========================================================================
-- Ajout de colonnes pour distinguer les contrats génériques des spécifiques
-- et permettre l'injection de tous les contrats avec échéances
-- ========================================================================

USE appros;

-- Ajouter les nouvelles colonnes
ALTER TABLE eex_v2_mega_catalog
    ADD COLUMN IF NOT EXISTS contract_level ENUM('generic', 'specific') DEFAULT 'generic' 
        COMMENT 'generic=famille de produits, specific=contrat avec échéance' AFTER product_type,
    ADD COLUMN IF NOT EXISTS parent_code VARCHAR(50) DEFAULT NULL 
        COMMENT 'Code du produit parent générique pour les contrats spécifiques' AFTER contract_level,
    ADD COLUMN IF NOT EXISTS delivery_start DATE DEFAULT NULL 
        COMMENT 'Date de début de livraison du contrat' AFTER contract_period,
    ADD COLUMN IF NOT EXISTS delivery_end DATE DEFAULT NULL 
        COMMENT 'Date de fin de livraison du contrat' AFTER delivery_start,
    ADD COLUMN IF NOT EXISTS maturity_date DATE DEFAULT NULL 
        COMMENT 'Date d\'échéance/expiration du contrat' AFTER delivery_end,
    ADD COLUMN IF NOT EXISTS contract_year YEAR DEFAULT NULL 
        COMMENT 'Année du contrat' AFTER maturity_date,
    ADD COLUMN IF NOT EXISTS contract_quarter TINYINT DEFAULT NULL 
        COMMENT 'Trimestre (1-4) pour les contrats trimestriels' AFTER contract_year,
    ADD COLUMN IF NOT EXISTS contract_month TINYINT DEFAULT NULL 
        COMMENT 'Mois (1-12) pour les contrats mensuels' AFTER contract_quarter,
    ADD COLUMN IF NOT EXISTS trading_status ENUM('active', 'expired', 'future', 'suspended') DEFAULT 'active' 
        COMMENT 'Statut de trading du contrat' AFTER is_available;

-- Ajouter des index pour les nouvelles colonnes
ALTER TABLE eex_v2_mega_catalog
    ADD INDEX idx_contract_level (contract_level),
    ADD INDEX idx_parent_code (parent_code),
    ADD INDEX idx_delivery_dates (delivery_start, delivery_end),
    ADD INDEX idx_contract_year (contract_year),
    ADD INDEX idx_trading_status (trading_status);

-- Mettre à jour les produits existants comme 'generic'
UPDATE eex_v2_mega_catalog 
SET contract_level = 'generic'
WHERE contract_level IS NULL;

-- ========================================================================
-- CRÉER UNE VUE POUR LES CONTRATS ACTIFS AVEC HIÉRARCHIE
-- ========================================================================

DROP VIEW IF EXISTS v_mega_catalog_hierarchy;

CREATE VIEW v_mega_catalog_hierarchy AS
SELECT 
    mc.*,
    parent.product_name as parent_product_name,
    parent.product_code as parent_product_code,
    CASE 
        WHEN mc.contract_level = 'specific' THEN 
            CONCAT(mc.product_name, ' (', 
                COALESCE(DATE_FORMAT(mc.delivery_start, '%b %Y'), mc.contract_period), 
                ')')
        ELSE mc.product_name
    END as full_product_name,
    DATEDIFF(mc.delivery_start, CURDATE()) as days_to_delivery,
    CASE
        WHEN mc.maturity_date < CURDATE() THEN 'expired'
        WHEN mc.delivery_start > CURDATE() THEN 'future'
        WHEN mc.delivery_start <= CURDATE() AND mc.delivery_end >= CURDATE() THEN 'delivering'
        ELSE 'active'
    END as computed_status
FROM eex_v2_mega_catalog mc
LEFT JOIN eex_v2_mega_catalog parent 
    ON mc.parent_code = parent.product_code 
    AND parent.contract_level = 'generic';

-- ========================================================================
-- STATISTIQUES
-- ========================================================================

SELECT 
    '✅ EXTENSION MEGA CATALOG TERMINÉE' as status,
    COUNT(*) as total_produits,
    SUM(CASE WHEN contract_level = 'generic' THEN 1 ELSE 0 END) as generiques,
    SUM(CASE WHEN contract_level = 'specific' THEN 1 ELSE 0 END) as specifiques
FROM eex_v2_mega_catalog;

-- Afficher la structure mise à jour
DESCRIBE eex_v2_mega_catalog;
