-- =========================================================================
-- Script SQL pour Recalculer le Progrès de Toutes les Inscriptions
-- =========================================================================
-- 
-- Ce script met à jour la colonne 'progress' dans la table v2_enrollments
-- en calculant le pourcentage basé sur les séances complétées.
--
-- ATTENTION: Sauvegardez votre base de données avant d'exécuter ce script !
--
-- Utilisation:
--   1. Connectez-vous à phpMyAdmin ou votre client MySQL
--   2. Sélectionnez la base de données 'kuofkculearn'
--   3. Exécutez ce script
--
-- =========================================================================

-- Désactiver temporairement les vérifications de clés étrangères
SET FOREIGN_KEY_CHECKS = 0;

-- Commencer une transaction pour pouvoir annuler en cas d'erreur
START TRANSACTION;

-- =========================================================================
-- ÉTAPE 1: Créer une table temporaire avec les calculs de progrès
-- =========================================================================

DROP TEMPORARY TABLE IF EXISTS temp_progress_calc;

CREATE TEMPORARY TABLE temp_progress_calc AS
SELECT 
    e.id as enrollment_id,
    e.student_id,
    e.formation_id,
    
    -- Compter le total de séances pour cette formation
    (
        SELECT COUNT(DISTINCT s.id)
        FROM v2_seances s
        JOIN v2_lessons l ON s.lesson_id = l.id
        JOIN v2_phases ph ON l.phase_id = ph.id
        JOIN v2_levels lv ON ph.level_id = lv.id
        JOIN v2_programs p ON lv.program_id = p.id
        JOIN v2_formations f ON f.program_id = p.id
        WHERE f.id = e.formation_id
        AND s.is_active = 1
    ) as total_seances,
    
    -- Compter les séances complétées par cet étudiant
    (
        SELECT COUNT(*)
        FROM v2_student_seance_progress sp
        WHERE sp.student_id = e.student_id
        AND sp.registration_id = e.id
        AND sp.status = 'completed'
    ) as completed_seances
    
FROM v2_enrollments e;

-- =========================================================================
-- ÉTAPE 2: Afficher un aperçu des calculs (optionnel, pour vérification)
-- =========================================================================

SELECT 
    enrollment_id,
    student_id,
    formation_id,
    total_seances,
    completed_seances,
    CASE 
        WHEN total_seances > 0 
        THEN ROUND((completed_seances / total_seances) * 100, 2)
        ELSE 0
    END as calculated_progress
FROM temp_progress_calc
ORDER BY student_id, formation_id
LIMIT 20;

-- =========================================================================
-- ÉTAPE 3: Mettre à jour la table v2_enrollments avec les progrès calculés
-- =========================================================================

UPDATE v2_enrollments e
INNER JOIN temp_progress_calc t ON e.id = t.enrollment_id
SET 
    e.progress = CASE 
        WHEN t.total_seances > 0 
        THEN ROUND((t.completed_seances / t.total_seances) * 100, 2)
        ELSE 0
    END,
    e.is_completed = CASE 
        WHEN t.total_seances > 0 AND t.completed_seances >= t.total_seances 
        THEN 1
        ELSE 0
    END,
    e.completed_at = CASE 
        WHEN t.total_seances > 0 AND t.completed_seances >= t.total_seances 
        THEN COALESCE(e.completed_at, NOW())
        ELSE NULL
    END;

-- =========================================================================
-- ÉTAPE 4: Afficher le résultat de la mise à jour
-- =========================================================================

SELECT 
    COUNT(*) as total_enrollments_updated,
    SUM(CASE WHEN progress > 0 THEN 1 ELSE 0 END) as enrollments_with_progress,
    SUM(CASE WHEN is_completed = 1 THEN 1 ELSE 0 END) as completed_enrollments
FROM v2_enrollments;

-- =========================================================================
-- ÉTAPE 5: Afficher quelques exemples de mise à jour
-- =========================================================================

SELECT 
    e.id,
    s.email as student_email,
    f.title as formation_title,
    e.progress as new_progress,
    e.is_completed,
    t.completed_seances,
    t.total_seances
FROM v2_enrollments e
JOIN v2_students s ON e.student_id = s.id
JOIN v2_formations f ON e.formation_id = f.id
LEFT JOIN temp_progress_calc t ON e.id = t.enrollment_id
WHERE e.progress > 0
ORDER BY e.progress DESC
LIMIT 10;

-- =========================================================================
-- FINALISATION
-- =========================================================================

-- Si tout semble correct, décommenter la ligne suivante pour valider:
COMMIT;

-- En cas d'erreur, décommenter la ligne suivante pour annuler:
-- ROLLBACK;

-- Réactiver les vérifications de clés étrangères
SET FOREIGN_KEY_CHECKS = 1;

-- Nettoyer
DROP TEMPORARY TABLE IF EXISTS temp_progress_calc;

-- =========================================================================
-- VÉRIFICATION FINALE
-- =========================================================================

-- Vérifier l'étudiant medtaki@gmail.com spécifiquement
SELECT 
    s.email,
    f.title as formation,
    e.progress,
    e.is_completed,
    (SELECT COUNT(*) FROM v2_student_seance_progress sp 
     WHERE sp.registration_id = e.id AND sp.status = 'completed') as seances_completed,
    (SELECT COUNT(DISTINCT se.id) 
     FROM v2_seances se
     JOIN v2_lessons l ON se.lesson_id = l.id
     JOIN v2_phases ph ON l.phase_id = ph.id
     JOIN v2_levels lv ON ph.level_id = lv.id
     JOIN v2_programs p ON lv.program_id = p.id
     WHERE p.id = f.program_id) as total_seances
FROM v2_enrollments e
JOIN v2_students s ON e.student_id = s.id
JOIN v2_formations f ON e.formation_id = f.id
WHERE s.email = 'medtaki@gmail.com';

-- =========================================================================
-- NOTES
-- =========================================================================
-- 
-- Ce script effectue les opérations suivantes :
-- 1. Calcule le nombre total de séances pour chaque formation
-- 2. Compte les séances complétées par chaque étudiant
-- 3. Calcule le pourcentage de progression (complétées / total * 100)
-- 4. Met à jour is_completed et completed_at si progression = 100%
--
-- Résultat attendu pour medtaki@gmail.com (formation_69529c663190a) :
--   - Total séances: 8
--   - Complétées: 3
--   - Progrès: 37.5%
--
-- =========================================================================
