<?php
// ─── Configuración de Base de Datos ───
// Carga las credenciales desde config.php (no versionado en git).
// Si no existe, usa valores por defecto para desarrollo local.
if (file_exists(__DIR__ . '/config.php')) {
    require_once __DIR__ . '/config.php';
} else {
    $servername = "localhost";
    $username   = "root";
    $password   = "";
    $dbname     = "ruleta_db";
}

// Crear la conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
  die(json_encode(["error" => "Conexión fallida: " . $conn->connect_error]));
}

// Obtener la IP del cliente en el servidor
$ip_address = $_SERVER['REMOTE_ADDR'];

// Recibir los datos enviados desde el frontend
$data = json_decode(file_get_contents("php://input"), true);
$user_agent = $data['user_agent'] ?? null;
$nombre_usuario = $data['nombre_usuario'] ?? null;

// Consultar la cantidad de giros disponibles en la tabla limite_giros
$sqlLimite = "SELECT cantidad FROM girospermitidos WHERE id = 1"; // Se asume un único registro de control
$resultLimite = $conn->query($sqlLimite);

if ($resultLimite->num_rows > 0) {
    $rowLimite = $resultLimite->fetch_assoc();
    $cantidadGirosDisponibles = $rowLimite['cantidad'];

    if ($cantidadGirosDisponibles <= 0) {
        echo json_encode(["error" => "Se ha alcanzado el límite de giros"]);
        $conn->close();
        exit();
    }

    // Restar un giro al contador global
    $stmtGiros = $conn->prepare("UPDATE girospermitidos SET cantidad = cantidad - 1 WHERE id = 1");
    if ($stmtGiros) {
        $stmtGiros->execute();
        $stmtGiros->close();
    } else {
        echo json_encode(["error" => "Error al actualizar el límite de giros"]);
        $conn->close();
        exit();
    }
} else {
    echo json_encode(["error" => "No se encontró el registro de límite de giros"]);
    $conn->close();
    exit();
}

// Consultar los premios con cantidad mayor que 0
$sql = "SELECT id, nombre, probabilidad, cantidad, inicio, final FROM premiosnew WHERE cantidad > 0 AND nombre_usuario = '$nombre_usuario'";
$result = $conn->query($sql);

$premios = array();
$totalProbabilidad = 0;

if ($result->num_rows > 0) {
  // Calcular el total de probabilidades
  while ($row = $result->fetch_assoc()) {
    $premios[] = $row;
    $totalProbabilidad += $row['probabilidad'];
  }

  // Generar un número aleatorio entre 0 y el total de probabilidades
  $random = mt_rand(0, $totalProbabilidad * 1000) / 1000; // Se multiplica por 1000 para trabajar con 3 decimales
  $suma = 0;

  // Seleccionar el premio basado en la probabilidad acumulada
  foreach ($premios as $premio) {
    $suma += $premio['probabilidad'];
    if ($random <= $suma) {
      // Actualizar la cantidad del premio seleccionado
      $stmt = $conn->prepare("UPDATE premiosnew SET cantidad = cantidad - 1 WHERE id = ?");
      if ($stmt) {
        $stmt->bind_param("i", $premio['id']);
        $stmt->execute();
        $stmt->close();

        // Agregar el premio y nombre a la tabla premios
        $stmtInsert = $conn->prepare(
          "INSERT INTO premiosentregados (nombre_usuario, premio, ip_address, user_agent) 
           VALUES (?, ?, ?, ?)"
        );
        if ($stmtInsert) {
          $stmtInsert->bind_param(
            "ssss",
            $nombre_usuario,
            $premio['nombre'],
            $ip_address,
            $user_agent
          );
          $stmtInsert->execute();
          $stmtInsert->close();
        } else {
          echo json_encode(["error" => "Error al guardar el participante"]);
          exit();
        }

        // Devolver el premio seleccionado con sus rangos de ángulo
        echo json_encode([
          'id' => $premio['id'],
          'nombre' => $premio['nombre'],
          'inicio' => $premio['inicio'],
          'final' => $premio['final']
        ]);
        exit(); // Salir inmediatamente después de devolver el premio seleccionado
      } else {
        echo json_encode(["error" => "Error en la preparación de la actualización"]);
      }
      break;
    }
  }
} else {
  echo json_encode(["error" => "No hay premios disponibles"]);
}

$conn->close();
?>
