<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Content-Type: application/json; charset=UTF-8");

// Para solicitudes OPTIONS (preflight CORS)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// Incluir archivos de conexión y funciones
require("./connect.php");
include('../../vendor/funciones.php');
include('../../vendor/DBA.php');
include('../../vendor/EncryptClass.php');
include('../../vendor/Security.php');

// Inicializar clases principales
$security = new Security();
$myencrypt = new EncryptClass();
$tokenID = getCode();

// Obtener los datos de la solicitud
$input = file_get_contents('php://input');
$datapost = json_decode($input, true);

// Obtener el tipo de operación
$tipo = isset($_POST['tipo']) ? $_POST['tipo'] : (isset($_GET['tipo']) ? $_GET['tipo'] : (isset($datapost['tipo']) ? $datapost['tipo'] : ''));

function getSystemInfo()
{
    return [
        'version' => '1.0.0',
        'api_version' => '1.0',
        'date' => date('Y-m-d H:i:s'),
        'php_version' => PHP_VERSION,
        'server' => $_SERVER['SERVER_SOFTWARE']
    ];
}
// Función para enviar respuesta JSON
function sendResponse($success, $message = '', $data = null)
{
    echo json_encode([
        "success" => $success,
        "message" => $message,
        "data" => $data
    ]);
    exit;
}

// Si no hay tipo de operación, mostrar error
if (empty($tipo)) {
    // Si no hay tipo pero es un GET sin parámetros, mostrar info de la API
    if ($_SERVER['REQUEST_METHOD'] === 'GET' && empty($_GET)) {
        echo json_encode([
            "success" => true,
            "message" => "Api Presto v2",
            "systemInfo" => getSystemInfo()
        ]);
        exit;
    }

    sendResponse(false, "Tipo de operación no especificado");
}

// Limpiar datos de entrada
if (isset($datapost)) {
    array_walk_recursive($datapost, function (&$item) {
        if (is_string($item)) {
            $item = trim($item);
        }
    });
}

// Rutas de la API
switch ($tipo) {
    // Rutas de autenticación
    case 'login':
    case 'getPerfiles':
    case 'getPerfil':
    case 'registrarModulo':
        include('./Auth.php');
        break;

    // Rutas de mesas
    case 'getMesas':
    case 'getMesa':
    case 'updateMesaStatus':
    case 'checkMesaAvailability':
    case 'getMesasPorTipo':
        include('./Mesa.php');
        break;

    // Rutas de pedidos
    case 'cambiarMesaPedido':
    case 'verificarPedidoEnMesa':
    case 'crearPedido':
    case 'getPedido':
    case 'getPedidosActivos':
    case 'actualizarPedido':
    case 'agregarProductoPedido':
    case 'eliminarProductoPedido':
    case 'actualizarCantidadProducto':
    case 'finalizarPedido':
    case 'cancelarPedido':
    case 'agregarObservacionesProducto':
    case 'aplicarPromocionesAPedido':
    case 'separarCuenta':
        include('./Pedidos.php');
        break;
    //pedidos rappi 
    case 'crearPedidoRappi':
    case 'actualizarPedidoRappi':
    case 'agregarProductoPedidoRappi':
    case 'getPedidoRappi':
    case 'getPedidosRappi':
    case 'finalizarPedidoRappi':
        include('./PedidosRappi.php');
        break;
    //pedidos uber 
    case 'crearPedidoUber':
    case 'actualizarPedidoUber':
    case 'agregarProductoPedidoUber':
    case 'getPedidoUber':
    case 'getPedidosUber':
    case 'finalizarPedidoUber':
        include('./PedidosUber.php');
        break;
    //pedidos delibot 
    case 'crearPedidoDelibot':
    case 'actualizarPedidoDelibot':
    case 'agregarProductoPedidoDelibot':
    case 'getPedidoDelibot':
    case 'getPedidosDelibot':
    case 'finalizarPedidoDelibot':
        include('./PedidosDeli.php');
        break;

    //pedidos llevar 
    case 'crearPedidoLlevar':
    case 'actualizarPedidoLlevar':
    case 'agregarProductoPedidoLlevar':
    case 'getPedidoLlevar':
    case 'getPedidosLlevar':
    case 'finalizarPedidoLlevar':
        include('./Pedidos.php');
        break;

    // Rutas de meseros
    case 'getMeseros':
    case 'getMesero':
        include('./Mesero.php');
        break;

    // Rutas de categorías y platillos
    case 'getCategorias':
    case 'getCategoria':
    case 'getPlatillosPorCategoria':
    case 'getPlatillo':
    case 'buscarPlatillos':
    case 'verificarDisponibilidadPlatillo':
        include('./Categorias.php');
        break;

    // Rutas de promociones
    case 'getPromocionesActivas':
    case 'getPromocionesPorTipo':
    case 'getProductosPromocionRegalo':
    case 'verificarPromocionesProducto':
    case 'getDetallePromocion':
        include('./Promociones.php');
        break;
    //PORDUCOTS
    case 'getPorCategoria':
    case 'getIngredientesProducto':
    case 'buscarPlatillosPorIngrediente':
        include('./Productos.php');
        break;
    //Impresoras
    case 'getImpresorasNecesarias':
    case 'getPlatillosConImpresora':
    case 'verificarEstadoImpresora':
        include('./Impresoras.php');
        break;

    // NUEVAS RUTAS: Biométrico
    case 'connectBiometric':
    case 'disconnectBiometric':
    case 'captureBiometric':
    case 'enrollBiometric':
    case 'verifyBiometric':
    case 'deleteBiometric':
    case 'getUserFingerprints':
    case 'cancelBiometric':
    case 'listBiometricDevices':
        include('./Biometrico.php');
        break;
    default:
        sendResponse(false, "Operación no implementada: " . $tipo);
        break;
}
