<?php
// Prevenir acceso directo
if (!defined('BASEPATH')) exit('No direct script access allowed');

switch ($tipo) {
    case 'getProductosEtiquetas':
        try {
            $busqueda = isset($datapost['busqueda']) ? trim($datapost['busqueda']) : '';
            $categoria_id = isset($datapost['categoria_id']) ? intval($datapost['categoria_id']) : null;
            $pagina = isset($datapost['pagina']) ? intval($datapost['pagina']) : 1;
            $limite = isset($datapost['limite']) ? intval($datapost['limite']) : 50;

            if ($pagina < 1) $pagina = 1;
            if ($limite < 1) $limite = 50;
            if ($limite > 200) $limite = 200;

            $offset = ($pagina - 1) * $limite;

            $whereConditions = ["p.activo = 1"];
            $params = [];
            $types = "";

            if (!empty($busqueda)) {
                $whereConditions[] = "(p.nombre LIKE ? OR p.codigo_barras LIKE ? OR p.codigo_corto LIKE ?)";
                $searchTerm = "%$busqueda%";
                $params[] = $searchTerm;
                $params[] = $searchTerm;
                $params[] = $searchTerm;
                $types .= "sss";
            }

            if ($categoria_id !== null && $categoria_id > 0) {
                $whereConditions[] = "p.categoria_id = ?";
                $params[] = $categoria_id;
                $types .= "i";
            }

            $whereClause = implode(" AND ", $whereConditions);

            // Contar total
            $countQuery = "SELECT COUNT(*) as total FROM productos p WHERE $whereClause";
            $stmtCount = $conn->prepare($countQuery);
            if (!empty($params)) {
                $stmtCount->bind_param($types, ...$params);
            }
            $stmtCount->execute();
            $total = intval($stmtCount->get_result()->fetch_assoc()['total']);
            $stmtCount->close();

            // Obtener productos
            $query = "SELECT
                p.id,
                p.nombre,
                p.codigo_barras,
                p.codigo_corto,
                p.precio_lista,
                p.precio1,
                p.precio2,
                p.precio3,
                p.unidad_medida,
                p.categoria_id,
                c.nombre as categoria_nombre
            FROM productos p
            LEFT JOIN categorias c ON p.categoria_id = c.id
            WHERE $whereClause
            ORDER BY p.nombre ASC
            LIMIT ? OFFSET ?";

            $params[] = $limite;
            $params[] = $offset;
            $types .= "ii";

            $stmt = $conn->prepare($query);
            $stmt->bind_param($types, ...$params);
            $stmt->execute();
            $result = $stmt->get_result();

            $productos = [];
            while ($row = $result->fetch_assoc()) {
                $row['id'] = intval($row['id']);
                $row['precio_lista'] = floatval($row['precio_lista']);
                $row['precio1'] = floatval($row['precio1']);
                $row['precio2'] = floatval($row['precio2']);
                $row['precio3'] = floatval($row['precio3']);
                $productos[] = $row;
            }

            sendResponse(true, "Productos obtenidos", [
                'productos' => $productos,
                'total' => $total,
                'pagina' => $pagina,
                'limite' => $limite,
                'total_paginas' => ceil($total / $limite)
            ]);
        } catch (Exception $e) {
            error_log("Error getProductosEtiquetas: " . $e->getMessage());
            sendResponse(false, "Error al obtener productos");
        }
        break;

    case 'getPlantillasEtiquetas':
        try {
            $query = "SELECT id, nombre, ancho_mm, alto_mm, zpl_template, activo, fecha_creacion
                      FROM etiquetas_plantillas
                      WHERE activo = 1
                      ORDER BY nombre ASC";
            $result = $conn->query($query);

            if (!$result) {
                // Si la tabla no existe, devolver plantillas por defecto
                sendResponse(true, "Plantillas por defecto", [
                    [
                        'id' => 0,
                        'nombre' => 'Estandar 50x25mm',
                        'ancho_mm' => 50,
                        'alto_mm' => 25,
                        'zpl_template' => '',
                        'activo' => true
                    ],
                    [
                        'id' => 0,
                        'nombre' => 'Grande 100x50mm',
                        'ancho_mm' => 100,
                        'alto_mm' => 50,
                        'zpl_template' => '',
                        'activo' => true
                    ]
                ]);
                break;
            }

            $plantillas = [];
            while ($row = $result->fetch_assoc()) {
                $plantillas[] = $row;
            }

            if (empty($plantillas)) {
                $plantillas = [
                    [
                        'id' => 0,
                        'nombre' => 'Estandar 50x25mm',
                        'ancho_mm' => 50,
                        'alto_mm' => 25,
                        'zpl_template' => '',
                        'activo' => true
                    ]
                ];
            }

            sendResponse(true, "Plantillas obtenidas", $plantillas);
        } catch (Exception $e) {
            sendResponse(true, "Plantillas por defecto", [
                [
                    'id' => 0,
                    'nombre' => 'Estandar 50x25mm',
                    'ancho_mm' => 50,
                    'alto_mm' => 25,
                    'zpl_template' => '',
                    'activo' => true
                ]
            ]);
        }
        break;

    default:
        sendResponse(false, "Operacion no valida para etiquetas Zebra");
        break;
}
?>
