<?php

// Configurar zona horaria de México
date_default_timezone_set('America/Mexico_City');

// Headers CORS
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
header("Access-Control-Allow-Credentials: true");
header("Content-Type: application/json; charset=UTF-8");

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

// Incluir archivo de conexión
require_once __DIR__ . '/../../config/database.php';

// Inicializar conexión
$database = new Database();
$conn = $database->getConnection();

// 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'] : ''));

// 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 info de la API
if (empty($tipo)) {
    if ($_SERVER['REQUEST_METHOD'] === 'GET' && empty($_GET)) {
        echo json_encode([
            "success" => true,
            "message" => "API Rutas v1.0",
            "systemInfo" => [
                'app_name' => 'Sistema de Rutas',
                'version' => '1.0.0',
                'api_version' => '1.0',
                'date' => date('Y-m-d H:i:s')
            ]
        ]);
        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);
        }
    });
}

// DEBUG: Log del tipo de operación
error_log("API Rutas: Tipo de operación recibida: " . $tipo);

// Rutas de la API
switch ($tipo) {
    // === AUTENTICACIÓN ===
    case 'login':
    case 'logout':
    case 'verify':
    case 'refresh-token':
    case 'getUserProfile':
        error_log("API: Incluyendo Auth.php para tipo: " . $tipo);
        include(__DIR__ . '/Auth.php');
        break;

    // === USUARIOS ===
    case 'getUsuarios':
    case 'createUsuario':
    case 'updateUsuario':
    case 'deleteUsuario':
    case 'getUsuario':
    case 'asignarRol':
    case 'toggleUsuarioStatus':
        include(__DIR__ . '/Usuarios.php');
        break;

    // === ROLES Y PERMISOS ===
    case 'getRoles':
    case 'createRol':
    case 'updateRol':
    case 'deleteRol':
    case 'getPermisos':
    case 'asignarPermisos':
    case 'getModulos':
    case 'getPermissionsMatrix':
    case 'savePermissionsMatrix':
        include(__DIR__ . '/Roles.php');
        break;

    // === RUTAS ===
    case 'getRutas':
    case 'createRuta':
    case 'updateRuta':
    case 'deleteRuta':
    case 'getRuta':
    case 'asignarVehiculo':
    case 'asignarConductor':
    case 'getRepartidoresDisponibles':
    case 'getVehiculosDisponibles':
    case 'cambiarEstadoRuta':
    case 'generarCodigoRuta':
    case 'getEstadisticasRutas':
    case 'getRutasDisponiblesRepartidor':
    case 'getRutaDelDia':
    case 'registrarVisitaCliente':
    case 'clonarRuta':
    case 'getReporteVisitasRutas':
        include(__DIR__ . '/Rutas.php');
        break;

    // === VEHÍCULOS ===
    case 'getVehiculos':
    case 'createVehiculo':
    case 'updateVehiculo':
    case 'deleteVehiculo':
    case 'getVehiculo':
    case 'getVehiculosDisponibles':
        include(__DIR__ . '/Vehiculos.php');
        break;

    // === CONDUCTORES ===
    case 'getConductores':
    case 'createConductor':
    case 'updateConductor':
    case 'deleteConductor':
    case 'getConductor':
    case 'getConductoresDisponibles':
        include(__DIR__ . '/Conductores.php');
        break;

    // === PRODUCTOS ===
    case 'getProductos':
    case 'createProducto':
    case 'updateProducto':
    case 'deleteProducto':
    case 'getProducto':
    case 'getCategorias':
    case 'createCategoria':
    case 'updateStock':
    case 'getMovimientos':
    case 'getEstadisticasProductos':
        include(__DIR__ . '/Productos.php');
        break;

    // === SUBIDA DE IMÁGENES ===
    case 'uploadImage':
    case 'deleteImage':
        include(__DIR__ . '/ImageUpload.php');
        break;

    // === MOTIVOS DE STOCK ===
    case 'getMotivosStock':
    case 'createMotivoStock':
    case 'updateMotivoStock':
    case 'deleteMotivoStock':
    case 'getMotivoStock':
    case 'getMotivosPorTipo':
    case 'setDefaultMotivoStock':
    case 'getEstadisticasMotivos':
        include(__DIR__ . '/MotivosStock.php');
        break;

    // === CLIENTES ===
    case 'getClientes':
    case 'createCliente':
    case 'updateCliente':
    case 'deleteCliente':
    case 'getCliente':
    case 'getEstadisticasClientes':
    case 'getHistorialCliente':
    case 'generarCodigoCliente':
    case 'addNotaCliente':
        include(__DIR__ . '/Clientes.php');
        break;

    // === CLIENTES PARA REPARTIDORES ===
    case 'buscarClientesRepartidor':
    case 'getClienteRepartidor':
    case 'getTodosClientesRepartidor':
        include(__DIR__ . '/ClientesRepartidor.php');
        break;

    // === MIGRACIÓN DE DIRECCIONES ===
    case 'migrarDireccionesURL':
    case 'procesarDireccionURL':
    case 'obtenerClientesConURL':
        include(__DIR__ . '/MigracionDirecciones.php');
        break;

    // === DASHBOARD ===
    case 'getDashboardStats':
    case 'getRutasActivas':
    case 'getEstadisticas':
        include(__DIR__ . '/Dashboard.php');
        break;

    // === REPORTES ===
    case 'getReportes':
    case 'generarReporte':
    case 'exportarReporte':
        include(__DIR__ . '/Reportes.php');
        break;

    // === REPARTIDORES ===
    case 'getRepartidores':
    case 'createRepartidor':
    case 'updateRepartidor':
    case 'deleteRepartidor':
    case 'getRepartidor':
    case 'cambiarEstadoRepartidor':
    case 'getEstadisticasRepartidores':
    case 'loginRepartidor':
    case 'generarCodigoRepartidor':
        include(__DIR__ . '/Repartidores.php');
        break;

    // === CÓDIGOS QR ===
    case 'generarLoteQR':
    case 'getLotesQR':
    case 'getCodigosLote':
    case 'asignarQRCliente':
    case 'desasignarQRCliente':
    case 'getQRDisponibles':
    case 'getQRAsignado':
    case 'getEstadisticasQR':
    case 'marcarLoteImpreso':
    case 'marcarLoteComoUsado':
    case 'marcarCodigoComoUsado':
    case 'eliminarLoteQR':
    case 'getHistorialQR':
    case 'identificarCliente':
        include(__DIR__ . '/CodigosQR.php');
        break;

    // === VENTAS ===
    case 'registrarVenta':
    case 'getVentas':
    case 'getVenta':
    case 'anularVenta':
    case 'getHistorialVentas':
    case 'getDetalleVenta':
    case 'getUltimasComprasCliente':
    case 'getReporteVentasMensual':
    case 'getReporteBaseMensual':
    case 'getReporteClientes':
    case 'getReporteProductos':
    case 'getReporteRTMTop3':
        include(__DIR__ . '/Ventas.php');
        break;

    // === DEVOLUCIONES ===
    case 'registrarDevolucion':
    case 'registrarVentaConDevolucion':
    case 'getHistorialDevoluciones':
    case 'getDetalleDevolucion':
    case 'cancelarDevolucion':
    case 'getInventarioDevoluciones':
    case 'retirarInventarioDevoluciones':
        include(__DIR__ . '/Devoluciones.php');
        break;

    // === CAMBIOS (GARANTÍAS) ===
    case 'registrarCambio':
    case 'getHistorialCambios':
    case 'getDetalleCambio':
    case 'cancelarCambio':
        include(__DIR__ . '/Cambios.php');
        break;

    // === INVENTARIOS DE REPARTIDORES ===
    case 'getInventarioRepartidor':
    case 'getInventariosRepartidores':
    case 'asignarProductosRepartidor':
    case 'retirarProductosRepartidor':
    case 'ajustarInventarioRepartidor':
    case 'getHistorialMovimientosRepartidor':
    case 'getEstadisticasInventariosRepartidores':
    case 'transferirProductosEntreRepartidores':
        include(__DIR__ . '/InventariosRepartidor.php');
        break;

    // === PROMOCIONES Y DEGUSTACIONES ===
    case 'registrarPromocion':
    case 'getHistorialPromociones':
    case 'getDetallePromocion':
    case 'cancelarPromocion':
        include(__DIR__ . '/Promociones.php');
        break;

    // === OPERACIÓN COMPLETA (UNIFICADA) ===
    case 'registrarOperacionCompleta':
        include(__DIR__ . '/OperacionCompleta.php');
        break;

    // === CUENTAS POR COBRAR ===
    case 'getVentasCreditoPendientes':
    case 'getSaldoPorCliente':
    case 'getDetalleCuentaCliente':
    case 'registrarPago':
    case 'registrarPagoCuenta':
    case 'eliminarPago':
    case 'getResumenCuentasPorCobrar':
        include(__DIR__ . '/CuentasPorCobrar.php');
        break;

    default:
        error_log("API: Operación no implementada: " . $tipo);
        sendResponse(false, "Operación no implementada: " . $tipo);
        break;
}
