<?php
header('Content-Type: application/json');
require '../includes/config.php';

if (!is_logged_in()) {
    http_response_code(401);
    echo json_encode(['success' => false, 'error' => 'No autenticado']);
    exit;
}

$method = $_SERVER['REQUEST_METHOD'];

try {
    switch ($method) {
        case 'GET':
            // Obtener todos los alumnos
            $query = "SELECT * FROM alumnos ORDER BY nombre ASC";
            $stmt = $pdo->prepare($query);
            $stmt->execute();
            
            $alumnos = $stmt->fetchAll(PDO::FETCH_ASSOC);
            
            echo json_encode([
                'success' => true,
                'data' => $alumnos,
                'count' => count($alumnos)
            ]);
            break;
            
            case 'POST':
                $data = json_decode(file_get_contents('php://input'), true);
            
                if (empty($data['nombre']) || empty($data['email'])) {
                    http_response_code(400);
                    echo json_encode(['success' => false, 'error' => 'Nombre y email son requeridos']);
                    exit;
                }
            
                // Verificar email duplicado
                $stmt = $pdo->prepare("SELECT id FROM alumnos WHERE email = ?");
                $stmt->execute([$data['email']]);
                if ($stmt->fetch()) {
                    http_response_code(400);
                    echo json_encode(['success' => false, 'error' => 'El correo ya está registrado']);
                    exit;
                }
            
                // Verificar teléfono duplicado
                if (!empty($data['telefono'])) {
                    $stmt = $pdo->prepare("SELECT id FROM alumnos WHERE telefono = ?");
                    $stmt->execute([$data['telefono']]);
                    if ($stmt->fetch()) {
                        http_response_code(400);
                        echo json_encode(['success' => false, 'error' => 'El teléfono ya está registrado']);
                        exit;
                    }
                }
            
                $pdo->beginTransaction();
                try {
                    // Insertar alumno
                    $stmt = $pdo->prepare("
                        INSERT INTO alumnos (nombre, email, telefono) 
                        VALUES (?, ?, ?)
                    ");
                    $stmt->execute([
                        $data['nombre'],
                        $data['email'],
                        $data['telefono'] ?? null
                    ]);
            
                    $alumnoId = $pdo->lastInsertId();
            
                    // Si viene curso_id, asignar también a curso
                    if (!empty($data['curso_id'])) {
                        $stmt = $pdo->prepare("
                            INSERT INTO alumnos_cursos (alumno_id, curso_id, estado) 
                            VALUES (?, ?, 'cursando')
                        ");
                        $stmt->execute([$alumnoId, $data['curso_id']]);
                    }
            
                    $pdo->commit();
                    echo json_encode([
                        'success' => true, 
                        'id' => $alumnoId,
                        'message' => 'Alumno creado y asignado exitosamente'
                    ]);
                } catch (PDOException $e) {
                    $pdo->rollBack();
                    http_response_code(500);
                    echo json_encode(['success' => false, 'error' => 'Error al registrar: ' . $e->getMessage()]);
                }
                break;
                   
            
                case 'PUT':
                    $data = json_decode(file_get_contents('php://input'), true);
                
                    if (empty($data['id']) || empty($data['nombre']) || empty($data['email'])) {
                        http_response_code(400);
                        echo json_encode(['success' => false, 'error' => 'Datos incompletos']);
                        exit;
                    }
                
                    // Verificar email duplicado (excluyendo el mismo alumno)
                    $stmt = $pdo->prepare("SELECT id FROM alumnos WHERE email = ? AND id != ?");
                    $stmt->execute([$data['email'], $data['id']]);
                    if ($stmt->fetch()) {
                        http_response_code(400);
                        echo json_encode(['success' => false, 'error' => 'El correo ya está registrado por otro alumno']);
                        exit;
                    }
                
                    // Verificar teléfono duplicado (excluyendo el mismo alumno)
                    if (!empty($data['telefono'])) {
                        $stmt = $pdo->prepare("SELECT id FROM alumnos WHERE telefono = ? AND id != ?");
                        $stmt->execute([$data['telefono'], $data['id']]);
                        if ($stmt->fetch()) {
                            http_response_code(400);
                            echo json_encode(['success' => false, 'error' => 'El teléfono ya está registrado por otro alumno']);
                            exit;
                        }
                    }
                
                    $stmt = $pdo->prepare("
                        UPDATE alumnos SET 
                        nombre = ?, 
                        email = ?, 
                        telefono = ?
                        WHERE id = ?
                    ");
                    $stmt->execute([
                        $data['nombre'],
                        $data['email'],
                        $data['telefono'] ?? null,
                        $data['id']
                    ]);
                
                    // Si curso_id viene en la actualización, actualizar también el curso
                    if (!empty($data['curso_id'])) {
                        // Verifica si ya tiene una relación previa
                        $check = $pdo->prepare("SELECT id FROM alumnos_cursos WHERE alumno_id = ?");
                        $check->execute([$data['id']]);
                
                        if ($check->fetch()) {
                            // Si ya tiene relación, actualizamos el curso asignado
                            $updateCurso = $pdo->prepare("
                                UPDATE alumnos_cursos SET curso_id = ?, estado = 'cursando'
                                WHERE alumno_id = ?
                            ");
                            $updateCurso->execute([$data['curso_id'], $data['id']]);
                        } else {
                            // Si no tiene relación previa, la insertamos
                            $insertCurso = $pdo->prepare("
                                INSERT INTO alumnos_cursos (alumno_id, curso_id, estado)
                                VALUES (?, ?, 'cursando')
                            ");
                            $insertCurso->execute([$data['id'], $data['curso_id']]);
                        }
                    }
                
                    echo json_encode([
                        'success' => true,
                        'message' => 'Alumno actualizado exitosamente'
                    ]);
                    break;
                
            
                    case 'DELETE':
                        $id = $_GET['id'] ?? null;
                        if (!$id) {
                            http_response_code(400);
                            echo json_encode(['success' => false, 'error' => 'ID de alumno no proporcionado']);
                            exit;
                        }
                    
                        try {
                            $pdo->beginTransaction();
                    
                            // Eliminar vinculaciones alumno_curso
                            $stmt = $pdo->prepare("DELETE FROM alumnos_cursos WHERE alumno_id = ?");
                            $stmt->execute([$id]);
                    
                            // Eliminar alumno
                            $stmt = $pdo->prepare("DELETE FROM alumnos WHERE id = ?");
                            $stmt->execute([$id]);
                    
                            $pdo->commit();
                    
                            echo json_encode([
                                'success' => true,
                                'message' => 'Alumno eliminado exitosamente'
                            ]);
                        } catch (PDOException $e) {
                            $pdo->rollBack();
                            http_response_code(500);
                            echo json_encode(['success' => false, 'error' => 'Error al eliminar alumno: ' . $e->getMessage()]);
                        }
                        break;
                    
            
        default:
            http_response_code(405);
            echo json_encode(['success' => false, 'error' => 'Método no permitido']);
    }
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => 'Error en la base de datos: ' . $e->getMessage()]);
}
?>