<?php
// GuardarJuezController.php (Ubicado en la raíz del proyecto)
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// 1. Verificar autenticación (Seguridad básica)
if (!isset($_SESSION['usu_id'])) {
    http_response_code(401);
    echo json_encode(["status" => "error", "message" => "Sesión no autorizada."]);
    exit();
}

// 2. Importar la conexión a la base de datos
require_once "modelo/Db.php";

// 3. Configurar cabecera de respuesta JSON
header('Content-Type: application/json');

// 4. Capturar los datos (Soporta envío tradicional POST o JSON tipo Fetch)
// Mapeamos los parámetros recibidos a los nombres reales (evento_id -> evp_id, juez_id -> usu_id)
$evento_id = $_POST['evento_id'] ?? null;
$juez_id   = $_POST['juez_id'] ?? null;
$accion    = $_POST['accion'] ?? 'asignar'; // 'asignar' o 'eliminar'

// Si los datos se enviaron como JSON raw (Fetch payload)
if (empty($evento_id)) {
    $input = json_decode(file_get_contents('php://input'), true);
    if ($input) {
        $evento_id = $input['evento_id'] ?? null;
        $juez_id   = $input['juez_id'] ?? null;
        $accion    = $input['accion'] ?? 'asignar';
    }
}

// 5. Validar campos requeridos
if (!$evento_id || !$juez_id) {
    http_response_code(400); // Bad Request
    echo json_encode([
        "status" => "error", 
        "message" => "Faltan parámetros requeridos. Evento ID: $evento_id, Juez ID: $juez_id"
    ]);
    exit();
}

try {
    // Instanciar base de datos
    $db = new Db();
    $conn = $db->conectar(); // Ajusta este método según el nombre real en tu clase 'Db'

    if ($accion === 'asignar') {
        // Verificar si ya está asignado para evitar duplicados en 'bas_jueces_eventos'
        $stmtCheck = $conn->prepare("SELECT COUNT(*) FROM bas_jueces_eventos WHERE evp_id = ? AND usu_id = ?");
        $stmtCheck->execute([$evento_id, $juez_id]);
        $existe = $stmtCheck->fetchColumn();

        if ($existe > 0) {
            echo json_encode(["status" => "warning", "message" => "El juez ya está asignado a este evento."]);
            exit();
        }

        // Insertar la asignación en 'bas_jueces_eventos'
        $stmt = $conn->prepare("INSERT INTO bas_jueces_eventos (evp_id, usu_id, created_at) VALUES (?, ?, NOW())");
        $resultado = $stmt->execute([$evento_id, $juez_id]);

        if ($resultado) {
            echo json_encode(["status" => "success", "message" => "Juez asignado correctamente al evento."]);
        } else {
            throw new Exception("Error al ejecutar la asignación en la base de datos.");
        }

    } elseif ($accion === 'eliminar') {
        // Eliminar la asignación de 'bas_jueces_eventos'
        $stmt = $conn->prepare("DELETE FROM bas_jueces_eventos WHERE evp_id = ? AND usu_id = ?");
        $resultado = $stmt->execute([$evento_id, $juez_id]);

        if ($resultado) {
            echo json_encode(["status" => "success", "message" => "Juez removido del evento."]);
        } else {
            throw new Exception("Error al intentar eliminar la asignación.");
        }
    } else {
        http_response_code(400);
        echo json_encode(["status" => "error", "message" => "Acción no válida."]);
    }

} catch (Exception $e) {
    http_response_code(500); // Internal Server Error
    echo json_encode([
        "status" => "error", 
        "message" => "Error interno en el servidor: " . $e->getMessage()
    ]);
}