<?php
header('Content-Type: application/json');
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/../config/security.php';

// Simulación de sesión de usuario (reemplazar con tu sistema de autenticación)
session_start();
if (!isset($_SESSION['user_id'])) {
    // En un caso real, tendrías un inicio de sesión. Para este ejemplo, asignamos un usuario por defecto.
    $_SESSION['user_id'] = 1; // Asumimos que el usuario con ID 1 es un administrador/entrevistador
}

$metodo = $_SERVER['REQUEST_METHOD'];
global $pdo; // Aseguramos que la variable $pdo de db_auto.php esté en el scope

try {
    switch ($metodo) {
        case 'GET':
            if (!isset($_GET['alumno_id']) || !is_numeric($_GET['alumno_id'])) {
                throw new Exception("ID de alumno no válido.");
            }
            $alumno_id = intval($_GET['alumno_id']);

            $stmt = $pdo->prepare("
                SELECT e.*, u.nombre as nombre_entrevistador 
                FROM entrevistas_alumno e
                JOIN usuarios u ON e.usuario_id = u.id
                WHERE e.alumno_id = ? 
                ORDER BY e.fecha_entrevista DESC
            ");
            $stmt->execute([$alumno_id]);
            $entrevistas = $stmt->fetchAll(PDO::FETCH_ASSOC);

            echo json_encode(['success' => true, 'data' => $entrevistas]);
            break;

        case 'POST':
            $data = json_decode(file_get_contents('php://input'), true);

            // Validación de datos
            if (empty($data['alumno_id']) || empty($data['fecha_entrevista']) || empty($data['tipo_entrevista']) || empty($data['motivo'])) {
                throw new Exception("Faltan campos obligatorios.");
            }

            $alumno_id = intval($data['alumno_id']);
            $usuario_id = $_SESSION['user_id'];
            $fecha_entrevista = $data['fecha_entrevista'];
            $tipo_entrevista = filter_var($data['tipo_entrevista'], FILTER_SANITIZE_STRING);
            $motivo = filter_var($data['motivo'], FILTER_SANITIZE_STRING);
            $acuerdos = filter_var($data['acuerdos_compromisos'] ?? '', FILTER_SANITIZE_STRING);
            $observaciones = filter_var($data['observaciones'] ?? '', FILTER_SANITIZE_STRING);

            $stmt = $pdo->prepare("
                INSERT INTO entrevistas_alumno (alumno_id, usuario_id, fecha_entrevista, tipo_entrevista, motivo, acuerdos_compromisos, observaciones) 
                VALUES (?, ?, ?, ?, ?, ?, ?)
            ");

            if (!$stmt->execute([$alumno_id, $usuario_id, $fecha_entrevista, $tipo_entrevista, $motivo, $acuerdos, $observaciones])) {
                throw new Exception("Error al guardar la entrevista: " . implode(" - ", $stmt->errorInfo()));
            }

            $nuevo_id = $pdo->lastInsertId();
            echo json_encode(['success' => true, 'message' => 'Entrevista guardada correctamente.', 'id' => $nuevo_id]);
            break;

        case 'PUT':
            $data = json_decode(file_get_contents('php://input'), true);

            if (empty($data['id']) || !is_numeric($data['id'])) {
                throw new Exception("ID de entrevista no válido.");
            }

            $id = intval($data['id']);
            $fecha_entrevista = $data['fecha_entrevista'];
            $tipo_entrevista = filter_var($data['tipo_entrevista'], FILTER_SANITIZE_STRING);
            $motivo = filter_var($data['motivo'], FILTER_SANITIZE_STRING);
            $acuerdos = filter_var($data['acuerdos_compromisos'] ?? '', FILTER_SANITIZE_STRING);
            $observaciones = filter_var($data['observaciones'] ?? '', FILTER_SANITIZE_STRING);

            $stmt = $pdo->prepare("
                UPDATE entrevistas_alumno 
                SET fecha_entrevista = ?, tipo_entrevista = ?, motivo = ?, acuerdos_compromisos = ?, observaciones = ?
                WHERE id = ?
            ");

            if (!$stmt->execute([$fecha_entrevista, $tipo_entrevista, $motivo, $acuerdos, $observaciones, $id])) {
                throw new Exception("Error al actualizar la entrevista: " . implode(" - ", $stmt->errorInfo()));
            }

            echo json_encode(['success' => true, 'message' => 'Entrevista actualizada correctamente.']);
            break;

        case 'DELETE':
            $data = json_decode(file_get_contents('php://input'), true);

            if (empty($data['id']) || !is_numeric($data['id'])) {
                throw new Exception("ID de entrevista no válido.");
            }

            $id = intval($data['id']);

            $stmt = $pdo->prepare("DELETE FROM entrevistas_alumno WHERE id = ?");

            if (!$stmt->execute([$id])) {
                throw new Exception("Error al eliminar la entrevista: " . implode(" - ", $stmt->errorInfo()));
            }

            if ($stmt->rowCount() > 0) {
                echo json_encode(['success' => true, 'message' => 'Entrevista eliminada correctamente.']);
            } else {
                throw new Exception("No se encontró la entrevista para eliminar.");
            }
            break;

        default:
            http_response_code(405);
            echo json_encode(['success' => false, 'error' => 'Método no permitido']);
            break;
    }
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
