<?php
include("../config/conexion.php"); // Incluir la conexión a la base de datos

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Recoger datos del formulario
    $fecha = $_POST['fecha'];
    $usuario = $_POST['usuario']; // Asegúrate de que este sea el ID del usuario
    $atendido = $_POST['atendido'];
    $carnet = $_POST['carnet'];
    $nombres = $_POST['nombres'];
    $carrera = $_POST['carrera'];
    $grado = $_POST['grado'];
    $seccion = $_POST['seccion'];
    $plan = $_POST['plan'];
    $comentario = $_POST['comentario'];

    // Verificar si ya existe una cita para el mismo usuario y fecha
    $checkSql = "SELECT * FROM cita WHERE usuario = ? AND fecha = ? LIMIT 1";
    $stmtCheck = $conexion->prepare($checkSql);
    $stmtCheck->bind_param("ss", $usuario, $fecha);
    $stmtCheck->execute();
    $resultado = $stmtCheck->get_result();

    if ($resultado->num_rows > 0) {
        echo "Error: Ya existe una cita asignada para este usuario en la fecha y hora seleccionadas.";
    } else {
        // Preparar la consulta de inserción de la cita
        $sql = "INSERT INTO cita (fecha, usuario, atendida, carnet, nombres, carrera, grado, seccion, plan, comentario) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        // Usar prepare statement
        if ($stmt = $conexion->prepare($sql)) {
            // Usar tipos correctos: 's' para strings
            $stmt->bind_param("ssssssssss", $fecha, $usuario, $atendido, $carnet, $nombres, $carrera, $grado, $seccion, $plan, $comentario);

            // Ejecutar la consulta
            if ($stmt->execute()) {
                echo "Cita guardada correctamente.";

                // Aquí comienza la lógica para las notificaciones
                // Obtener los roles a los que se enviarán las notificaciones
                $roles_a_notificar = ['Superadministrador', 'Administrador', 'Coordinador'];

                // Obtener los IDs de los usuarios que tienen estos roles
                $placeholders = implode(',', array_fill(0, count($roles_a_notificar), '?')); // Para la consulta SQL
                $sql_roles = "SELECT u.id AS id_usuario 
                              FROM usuarios u 
                              JOIN roles r ON u.rol_id = r.id 
                              WHERE r.nombre IN ($placeholders) AND u.estado = 'Activado'";

                // Preparar la consulta de usuarios
                $stmt_roles = $conexion->prepare($sql_roles);
                $stmt_roles->bind_param(str_repeat('s', count($roles_a_notificar)), ...$roles_a_notificar);
                $stmt_roles->execute();
                $resultado_roles = $stmt_roles->get_result();

                // Mensaje de la notificación
                $mensaje = "Se ha registrado una nueva cita para el usuario con carnet: " . htmlspecialchars($carnet) . ", fecha de cita: " . htmlspecialchars($fecha);

                // Insertar una notificación para cada usuario del sistema que pertenezca a los roles seleccionados
                if ($resultado_roles->num_rows > 0) {
                    while ($usuario = $resultado_roles->fetch_assoc()) {
                        $id_usuario = $usuario['id_usuario'];
                        $sql_notificacion = "INSERT INTO notificaciones (id_usuario, mensaje, leido) VALUES (?, ?, 0)";
                        $stmt_notificacion = $conexion->prepare($sql_notificacion);
                        $stmt_notificacion->bind_param('is', $id_usuario, $mensaje);
                        $stmt_notificacion->execute();
                    }
                }

                // Redirigir después de 2 segundos
                header("Refresh: 1; url=../iniciocita.php");
                exit();
            } else {
                echo "Error al guardar la cita: " . $stmt->error;
            }

            // Cerrar el statement
            $stmt->close();
        } else {
            echo "Error en la preparación de la consulta: " . $conexion->error;
        }
    }

    // Cerrar el statement de verificación y la conexión
    $stmtCheck->close();
    $conexion->close();
} else {
    echo "Método de solicitud no permitido.";
}
