<?php
// app/model/api/inscription_module_detail.php

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

require_once __DIR__ . '/../service/InscriptionModuleDetailService.php';
require_once __DIR__ . '/../service/StudentService.php';

$service = new InscriptionModuleDetailService();
$studentService = new StudentService();

$action = isset($_GET['action']) ? $_GET['action'] : '';
$method = $_SERVER['REQUEST_METHOD'];

try {
    switch ($method) {
        case 'GET':
            switch ($action) {
                // =========================================
                // RÉCUPÉRER LES ÉTUDIANTS D'UNE INSCRIPTION
                // =========================================
                case 'get_by_inscription':
                    if (isset($_GET['inscription_module_id'])) {
                        $data = $service->getStudentsByInscriptionId($_GET['inscription_module_id']);
                        echo json_encode(['success' => true, 'data' => $data]);
                    } else {
                        echo json_encode(['success' => false, 'message' => 'inscription_module_id requis']);
                    }
                    break;

                // =========================================
                // VÉRIFIER SI UN ÉTUDIANT EST INSCRIT
                // =========================================
                case 'check_student':
                    if (isset($_GET['inscription_module_id']) && isset($_GET['student_id'])) {
                        $exists = $service->studentAlreadyInscribed($_GET['inscription_module_id'], $_GET['student_id']);
                        echo json_encode(['success' => true, 'inscrit' => $exists]);
                    } else {
                        echo json_encode(['success' => false, 'message' => 'inscription_module_id et student_id requis']);
                    }
                    break;

                // =========================================
                // COMPTER LES ÉTUDIANTS
                // =========================================
                case 'count':
                    if (isset($_GET['inscription_module_id'])) {
                        $count = $service->countStudentsByInscriptionId($_GET['inscription_module_id']);
                        echo json_encode(['success' => true, 'data' => ['count' => $count]]);
                    } else {
                        echo json_encode(['success' => false, 'message' => 'inscription_module_id requis']);
                    }
                    break;

                // =========================================
                // STATISTIQUES
                // =========================================
                case 'stats':
                    $data = $service->getStats();
                    echo json_encode(['success' => true, 'data' => $data]);
                    break;

                // =========================================
                // EXPORT CSV
                // =========================================
                case 'export':
                    if (isset($_GET['inscription_module_id'])) {
                        $csv = $service->exportByInscriptionToCsv($_GET['inscription_module_id']);
                        if ($csv) {
                            header('Content-Type: text/csv; charset=utf-8');
                            header('Content-Disposition: attachment; filename="etudiants_inscription_' . $_GET['inscription_module_id'] . '_' . date('Y-m-d') . '.csv"');
                            echo $csv;
                            exit();
                        } else {
                            echo json_encode(['success' => false, 'message' => 'Aucun étudiant à exporter']);
                        }
                    } else {
                        echo json_encode(['success' => false, 'message' => 'inscription_module_id requis']);
                    }
                    break;

                // =========================================
                // RECHERCHER UN ÉTUDIANT PAR CIN
                // =========================================
                case 'search_student':
                    if (isset($_GET['code'])) {
                        $student = $studentService->findOneBy(['cin' => $_GET['code']]);
                        if (!$student) {
                            $student = $studentService->findOneBy(['email' => $_GET['code']]);
                        }
                        echo json_encode(['success' => true, 'data' => $student]);
                    } else {
                        echo json_encode(['success' => false, 'message' => 'code requis']);
                    }
                    break;

                default:
                    echo json_encode(['success' => false, 'message' => 'Action non reconnue']);
            }
            break;

        // =========================================
        // POST - CRÉATION
        // =========================================
        case 'POST':
            $input = json_decode(file_get_contents('php://input'), true);

            if ($action === 'batch') {
                // Création batch
                if ($input && isset($input['inscription_module_id']) && isset($input['student_ids'])) {
                    $description = isset($input['description']) ? $input['description'] : null;
                    $result = $service->createDetailsBatch(
                        $input['inscription_module_id'],
                        $input['student_ids'],
                        $description
                    );
                    echo json_encode($result);
                } else {
                    echo json_encode(['success' => false, 'message' => 'inscription_module_id et student_ids requis']);
                }
                break;
            }

            if ($action === 'import_csv') {
                // Importation CSV
                if (!isset($_FILES['csv_file']) || $_FILES['csv_file']['error'] !== UPLOAD_ERR_OK) {
                    echo json_encode(['success' => false, 'message' => 'Fichier CSV invalide ou manquant.']);
                    exit;
                }

                if (!isset($_POST['inscription_module_id']) || empty($_POST['inscription_module_id'])) {
                    echo json_encode(['success' => false, 'message' => 'ID de l\'inscription module manquant.']);
                    exit;
                }

                $inscriptionModuleId = intval($_POST['inscription_module_id']);
                $fileTmpPath = $_FILES['csv_file']['tmp_name'];
                $columnName = isset($_POST['column_name']) ? $_POST['column_name'] : 'cin';

                try {
                    $result = $service->createDetailsFromCSV($inscriptionModuleId, $fileTmpPath, $columnName);
                    echo json_encode($result);
                } catch (Exception $e) {
                    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
                }
                break;
            }

            // Création d'un seul détail
            if ($input && isset($input['inscription_module_id']) && isset($input['student_id'])) {
                $id = $service->createDetail($input);
                echo json_encode(['success' => true, 'id' => $id, 'message' => 'Étudiant inscrit avec succès']);
            } else {
                echo json_encode(['success' => false, 'message' => 'Données invalides']);
            }
            break;

        // =========================================
        // DELETE - SUPPRESSION
        // =========================================
        case 'DELETE':
            if (isset($_GET['inscription_module_id']) && isset($_GET['student_id'])) {
                $result = $service->deleteStudentFromInscription($_GET['inscription_module_id'], $_GET['student_id']);
                if ($result > 0) {
                    echo json_encode(['success' => true, 'message' => 'Étudiant retiré de l\'inscription avec succès']);
                } else {
                    echo json_encode(['success' => false, 'message' => 'Étudiant non trouvé dans cette inscription']);
                }
            } elseif (isset($_GET['inscription_module_id'])) {
                // Supprimer tous les étudiants d'une inscription
                $result = $service->deleteByInscriptionId($_GET['inscription_module_id']);
                echo json_encode(['success' => true, 'message' => 'Tous les étudiants ont été retirés de l\'inscription']);
            } else {
                echo json_encode(['success' => false, 'message' => 'ID requis']);
            }
            break;

        default:
            echo json_encode(['success' => false, 'message' => 'Méthode non autorisée']);
    }
} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
?>