USE martine;
DROP PROCEDURE IF EXISTS create_score_classement_view;

-- DELIMITER //

CREATE PROCEDURE create_classement_detail_view ()
BEGIN
    -- Déclarer une variable pour stocker la requête SQL dynamique
    DECLARE sql_query TEXT;

    -- Déclarer une variable pour stocker la liste des colonnes dynamiques
    DECLARE columns_list TEXT DEFAULT '';

    -- Curseur pour récupérer les valeurs distinctes de la colonne 'mois'
    DECLARE done INT DEFAULT FALSE;
    DECLARE activite_val VARCHAR(50);

    -- Curseur pour parcourir les mois distincts
    DECLARE cur CURSOR FOR
        SELECT DISTINCT id_activite FROM activites;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Initialiser la liste des colonnes
    SET columns_list = '';

    -- Ouvrir le curseur
    OPEN cur;

    -- Parcourir les mois distincts
    read_loop: LOOP
        FETCH cur INTO activite_val;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- Ajouter chaque mois à la liste des colonnes
        IF columns_list = '' THEN
            SET columns_list = CONCAT('SUM(IF(id_activite = ''', activite_val, ''', points, null)) AS `', activite_val, '`');
        ELSE
            SET columns_list = CONCAT(columns_list, ', SUM(IF(id_activite = ''', activite_val, ''', points, null)) AS `', activite_val, '`');
        END IF;
    END LOOP;

    -- Fermer le curseur
    CLOSE cur;

    DROP VIEW IF EXISTS `classement_detail`; 

    -- Construire la requête SQL dynamique
    SET @sql = CONCAT('
    CREATE VIEW `classement_detail` AS
        SELECT
            id_candidat, ', columns_list, '
        FROM
            score
        GROUP BY
            id_candidat
    ');

    -- Préparer et exécuter la requête dynamique
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END ;

-- DELIMITER ;