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

$logger = SystemLogger::getInstance();

if (!isset($_SESSION['user_id'])) {
    http_response_code(401);
    echo json_encode(['success' => false, 'msg' => 'No autenticado.']);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'msg' => 'Método no permitido.']);
    exit;
}

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

if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    echo json_encode(['success' => false, 'msg' => 'Datos JSON inválidos.']);
}

$alumno_ids = isset($data['alumno_ids']) ? (array)$data['alumno_ids'] : (isset($data['alumno_id']) ? [(int)$data['alumno_id']] : []);
$fecha = isset($data['fecha_entrevista']) ? trim($data['fecha_entrevista']) : null;
$motivo = isset($data['motivo']) ? trim($data['motivo']) : null;
$observaciones = isset($data['observaciones']) ? trim($data['observaciones']) : '';
$acuerdos = isset($data['acuerdos_compromisos']) ? trim($data['acuerdos_compromisos']) : '';
$usuario_registro = (int)$_SESSION['user_id'];

if (empty($alumno_ids) || !$fecha || !$motivo) {
    echo json_encode(['success' => false, 'msg' => 'Faltan datos obligatorios: Alumno(s), Fecha y Motivo.']);
    exit;
}

$fecha_completa = $fecha;
if (strlen($fecha_completa) === 16) { // Formato YYYY-MM-DDTHH:MM
    $fecha_completa = str_replace('T', ' ', $fecha_completa) . ':00';
}

try {
    $pdo->beginTransaction();
    $count = 0;
    foreach ($alumno_ids as $alumno_id) {
        $alumno_id = (int)$alumno_id;
        
        // 1. Verificar que el alumno existe
        $stmt_check = $pdo->prepare("SELECT id FROM alumnos WHERE id = ?");
        $stmt_check->execute([$alumno_id]);
        if ($stmt_check->fetch() === false) {
            throw new Exception("El alumno con ID $alumno_id no existe.");
        }

        // 2. Prevenir duplicados
        $stmt_dupe = $pdo->prepare("SELECT id FROM entrevistas_alumnos WHERE alumno_id = ? AND fecha_entrevista = ? AND motivo = ? AND fecha_creacion > NOW() - INTERVAL 5 MINUTE");
        $stmt_dupe->execute([$alumno_id, $fecha_completa, $motivo]);
        if ($stmt_dupe->fetch()) {
            continue; // Si ya existe para este alumno, saltamos al siguiente en vez de fallar todo el proceso
        }

        $stmt = $pdo->prepare("
            INSERT INTO entrevistas_alumnos (
                alumno_id, usuario_id, usuario_registro, fecha_entrevista, motivo, acuerdos, observaciones, fecha_creacion, fecha_modificacion, usuario_modificacion
            ) VALUES (
                :alumno_id, :usuario_id, :usuario_registro, :fecha_entrevista, :motivo, :acuerdos, :observaciones, NOW(), NULL, NULL
            )
        ");

        $stmt->execute([
            ':alumno_id' => $alumno_id,
            ':usuario_id' => $usuario_registro,
            ':usuario_registro' => $usuario_registro,
            ':fecha_entrevista' => $fecha_completa,
            ':motivo' => $motivo,
            ':acuerdos' => $acuerdos,
            ':observaciones' => $observaciones
        ]);
        $count++;
    }

    $pdo->commit();

    $logger->data('Entrevistas grupales creadas', "Cantidad: $count, Alumnos: " . implode(',', $alumno_ids) . ", Motivo: $motivo");
    echo json_encode([
        'success' => true,
        'msg' => $count > 1 ? "Se han registrado $count entrevistas correctamente." : "Entrevista guardada correctamente.",
        'count' => $count
    ]);

} catch (Exception $e) {
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    $logger->error('Error al guardar entrevista grupal', "Usuario ID: {$_SESSION['user_id']}, Alumnos: " . json_encode($alumno_ids) . ", Error: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['success' => false, 'msg' => 'Error en el servidor: ' . $e->getMessage()]);
}
