<?php
// Definir BASEPATH para seguridad
if (!defined('BASEPATH')) define('BASEPATH', true);

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
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 archivo de conexión
require("./connect.php");

// 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'],
        'system' => 'POS Torti API'
    ];
}

// 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 POS Torti v1.0",
            "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) {
    // === AUTENTICACION ===
    case 'login':
    case 'verificarToken':
    case 'cambiarPassword':
        include('./Auth.php');
        break;

    // === USUARIOS ===
    case 'getUsuarios':
    case 'getUsuario':
    case 'crearUsuario':
    case 'actualizarUsuario':
    case 'eliminarUsuario':
        include('./Usuarios.php');
        break;

    // === PERFILES Y PERMISOS ===
    case 'getPerfiles':
    case 'getPerfil':
    case 'crearPerfil':
    case 'actualizarPerfil':
    case 'eliminarPerfil':
    case 'getPermisos':
        include('./Perfiles.php');
        break;

    // === INGREDIENTES ===
    case 'getIngredientes':
    case 'getIngrediente':
    case 'crearIngrediente':
    case 'actualizarIngrediente':
    case 'eliminarIngrediente':
    case 'getCategoriasIngredientes':
    case 'getCategoriasIngredientesDetalle':
    case 'crearCategoriaIngrediente':
    case 'actualizarCategoriaIngrediente':
    case 'eliminarCategoriaIngrediente':
    case 'getUnidades':
        include('./Ingredientes.php');
        break;

    // === PRODUCTOS ===
    case 'getProductos':
    case 'getProducto':
    case 'crearProducto':
    case 'actualizarProducto':
    case 'eliminarProducto':
    case 'buscarProductos':
    case 'getCategoriasProductos':
    case 'crearCategoriaProducto':
    case 'actualizarCategoriaProducto':
    case 'eliminarCategoriaProducto':
    case 'actualizarStock':
        include('./Productos.php');
        break;

    // === RECETAS ===
    case 'getReceta':
    case 'guardarReceta':
    case 'eliminarReceta':
    case 'calcularCostoReceta':
        include('./Recetas.php');
        break;

    // === CATEGORÍAS (usar getCategoriasProductos, crearCategoriaProducto, etc. en Productos.php) ===

    // === REQUISICIONES / TRANSFERENCIAS ===
    case 'getSucursales':
    case 'crearSucursal':
    case 'actualizarSucursal':
    case 'eliminarSucursal':
    case 'getTransferencias':
    case 'getTransferenciaDetalle':
    case 'crearRequisicion':
    case 'crearEnvioDirecto':
    case 'aprobarRequisicion':
    case 'rechazarRequisicion':
    case 'enviarRequisicion':
    case 'recibirTransferencia':
    case 'cancelarTransferencia':
        include('./Requisiciones.php');
        break;

    // === PRODUCCIONES ===
    case 'getProductosConReceta':
    case 'getProducciones':
    case 'getProduccion':
    case 'registrarProduccion':
    case 'cancelarProduccion':
    case 'getResumenProducciones':
    case 'getProduccionesHoy':
    case 'getAjustesProduccion':
    case 'registrarAjusteProduccion':
    case 'getReporteProducciones':
        include('./Producciones.php');
        break;

    // === VENTAS ===
    case 'crearVenta':
    case 'getVenta':
    case 'getVentas':
    case 'cancelarVenta':
    case 'getVentasDelDia':
    case 'getVentasPorFecha':
    case 'getProductosPOS':
    // Pedidos pausados
    case 'getPedidosPausados':
    case 'getPedidoPausadoCliente':
    case 'pausarPedido':
    case 'retomarPedido':
    case 'cobrarPedidoPausado':
    case 'cancelarPedidoPausado':
        include('./Ventas.php');
        break;

    // === CLIENTES ===
    case 'getClientes':
    case 'getCliente':
    case 'crearCliente':
    case 'actualizarCliente':
    case 'eliminarCliente':
    case 'buscarClientes':
        include('./Clientes.php');
        break;

    // === INVENTARIO ===
    case 'getInventario':
    case 'actualizarInventario':
    case 'ajusteInventario':
    case 'getMovimientosInventario':
        include('./Inventario.php');
        break;

    // === CONFIGURACIÓN ===
    case 'getConfiguracion':
    case 'actualizarConfiguracion':
    case 'probarConexionRemota':
        include('./Configuracion.php');
        break;

    // === SINCRONIZACIÓN ===
    case 'sincronizar':
    case 'estadoSync':
        include('./Sync.php');
        break;

    // === COMPRAS ===
    case 'getCompras':
    case 'getCompraDetalle':
    case 'registrarCompra':
    case 'eliminarCompra':
        include('./Compras.php');
        break;

    // === MERMA ===
    case 'getMermas':
    case 'registrarMerma':
    case 'eliminarMerma':
        include('./Merma.php');
        break;

    // === CAJA / CORTES ===
    case 'getResumenCaja':
    case 'getPedidosPausadosActivos':
    case 'getProductosContabilizar':
    case 'getProductosSalida':
    case 'realizarCorte':
    case 'getCortes':
        include('./Caja.php');
        break;

    // === REPORTE INVENTARIO ===
    case 'getRastreoInventario':
        include('./ReporteInventario.php');
        break;

    // === INVENTARIO INGREDIENTES ===
    case 'getIngredientesParaConteo':
    case 'registrarConteoIngredientes':
    case 'getConteosIngredientes':
    case 'getConteoIngredienteDetalle':
        include('./InventarioIngredientes.php');
        break;

    // === TURNOS ===
    case 'getTurnoActivo':
    case 'iniciarTurno':
    case 'cerrarTurno':
    case 'getProductosContarInicio':
        include('./Turnos.php');
        break;

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