<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

/**
 * Export XLSX de la Vue d'ensemble du tableau de bord, avec exactement les
 * mêmes filtres que l'écran d'où il a été lancé (dashboard_repository est
 * l'unique source de vérité pour les deux). Les 4 autres vues qu'exportait
 * historiquement ce contrôleur (Compétences/Stages/Évaluations/CAPP) ont
 * été retirées le 2026-08-13 avec les onglets correspondants — voir
 * pages/comparateur_export.php pour leur remplacement.
 *
 * @package local_kid
 */

require(__DIR__ . '/../../../config.php');

use local_kid\event\export_generated;
use local_kid\local\access_helper;
use local_kid\local\dashboard_repository;
use local_kid\local\promotion_repository;
use local_kid\local\xlsx_service;

require_login();
$context = context_system::instance();
// Téléchargement en lecture seule (action « Télécharger les fiches »,
// tableau de droits) : accordé au même périmètre que local/kid:view, pas
// une capacité d'export dédiée.
access_helper::require_capability_or_teacher('local/kid:view', $context);

$view = required_param('view', PARAM_ALPHA);
$promotionid = required_param('promotionid', PARAM_INT);
$promotion = promotion_repository::get($promotionid);
if (!$promotion) {
    throw new \moodle_exception('invalidrecord', 'error');
}

if ($view !== 'overview') {
    throw new \moodle_exception('invalidparameter', 'error');
}

$data = dashboard_repository::overview($promotionid);
$headers = array_merge([get_string('entry_col_student', 'local_kid')], $data['sessioncodes']);
$rows = [];
foreach ($data['students'] as $student) {
    $row = [$student['name']];
    foreach ($student['cappstatuses'] as $status) {
        $row[] = $status['statuslabel'];
    }
    $rows[] = $row;
}

export_generated::create([
    'context' => $context,
    'userid' => (int) $USER->id,
    'other' => ['format' => 'xlsx', 'view' => $view, 'promotionid' => $promotionid],
])->trigger();

$spreadsheet = xlsx_service::generic_table($headers, $rows);
$filename = clean_param('kid_' . $view . '_' . $promotion->name . '.xlsx', PARAM_FILE);
xlsx_service::send($spreadsheet, $filename);
