<?php
session_start();
if (!isset($_SESSION['usuario']) || !isset($_SESSION['token'])) {
    die("Acceso no autorizado");
}

require 'conexion.php';

$accion = $_POST['accion'] ?? '';

switch ($accion) {
    case 'registrar':
        $cod_materia = $_POST['cod_materia'];
        $nom_materia = $_POST['nom_materia'];
        $acceso_id = $_POST['acceso_id'];
        $cant_pregunta = $_POST['cant_pregunta'] ?? 0;
    
        // Validaciones
        if (empty($cod_materia) || empty($nom_materia) || empty($acceso_id)) {
            exit("Todos los campos son obligatorios excepto cantidad de preguntas.");
        }
        
        // Verificar que el código de acceso existe
        $checkAcceso = $conn->prepare("SELECT cod_acceso FROM Accesos WHERE cod_acceso = ?");
        $checkAcceso->bind_param("s", $acceso_id);
        $checkAcceso->execute();
        if ($checkAcceso->get_result()->num_rows === 0) {
            exit("El código de acceso '$acceso_id' no existe.");
        }
        
        // Verificar que el código de materia no exista ya
        $checkMateria = $conn->prepare("SELECT cod_materia FROM Materias WHERE cod_materia = ?");
        $checkMateria->bind_param("s", $cod_materia);
        $checkMateria->execute();
        if ($checkMateria->get_result()->num_rows > 0) {
            exit("El código de materia '$cod_materia' ya existe.");
        }
        
        if (!is_numeric($cant_pregunta) || $cant_pregunta < 0) {
            exit("La cantidad de preguntas debe ser un número válido mayor o igual a 0.");
        }
    
        $stmt = $conn->prepare("INSERT INTO Materias (cod_materia, nom_materia, acceso_id, cant_pregunta) VALUES (?, ?, ?, ?)");
        $stmt->bind_param("sssi", $cod_materia, $nom_materia, $acceso_id, $cant_pregunta);
    
        if ($stmt->execute()) {
            echo "Materia registrada correctamente.";
        } else {
            echo "Error al guardar: " . $conn->error;
        }
        break;    

    case 'actualizar':
        $id = $_POST['id'];
        $cod_materia = $_POST['cod_materia'];
        $nom_materia = $_POST['nom_materia'];
        $acceso_id = $_POST['acceso_id'];
        $cant_pregunta = $_POST['cant_pregunta'] ?? 0;

        // Validaciones
        if (empty($cod_materia) || empty($nom_materia) || empty($acceso_id)) {
            exit("Todos los campos son obligatorios excepto cantidad de preguntas.");
        }
        
        // Verificar que el código de acceso existe
        $checkAcceso = $conn->prepare("SELECT cod_acceso FROM Accesos WHERE cod_acceso = ?");
        $checkAcceso->bind_param("s", $acceso_id);
        $checkAcceso->execute();
        if ($checkAcceso->get_result()->num_rows === 0) {
            exit("El código de acceso '$acceso_id' no existe.");
        }
        
        // Verificar que el código de materia no exista ya en otro registro
        $checkMateria = $conn->prepare("SELECT cod_materia FROM Materias WHERE cod_materia = ? AND Id != ?");
        $checkMateria->bind_param("si", $cod_materia, $id);
        $checkMateria->execute();
        if ($checkMateria->get_result()->num_rows > 0) {
            exit("El código de materia '$cod_materia' ya existe en otro registro.");
        }
        
        if (!is_numeric($cant_pregunta) || $cant_pregunta < 0) {
            exit("La cantidad de preguntas debe ser un número válido mayor o igual a 0.");
        }

        $sql = "UPDATE Materias SET cod_materia=?, nom_materia=?, acceso_id=?, cant_pregunta=? WHERE Id=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("sssii", $cod_materia, $nom_materia, $acceso_id, $cant_pregunta, $id);

        if ($stmt->execute()) {
            echo "Materia actualizada correctamente.";
        } else {
            echo "Error: " . $conn->error;
        }
        break;

    case 'eliminar':
        $id = $_POST['id'];
        
        // Verificar si la materia tiene preguntas asociadas
        $checkPreguntas = $conn->prepare("SELECT COUNT(*) as total FROM Preguntas WHERE materia_id = (SELECT cod_materia FROM Materias WHERE Id = ?)");
        $checkPreguntas->bind_param("i", $id);
        $checkPreguntas->execute();
        $result = $checkPreguntas->get_result()->fetch_assoc();
        
        if ($result['total'] > 0) {
            exit("No se puede eliminar la materia porque tiene " . $result['total'] . " pregunta(s) asociada(s).");
        }
        
        $stmt = $conn->prepare("DELETE FROM Materias WHERE Id = ?");
        $stmt->bind_param("i", $id);

        if ($stmt->execute()) {
            echo "Materia eliminada correctamente.";
        } else {
            echo "Error al eliminar: " . $conn->error;
        }
        break;

    default:
        echo "Acción no reconocida.";
        break;
}
?>