<?php
// vista/productos/inventario.php
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once "modelo/Db.php";

try {
    $bd = new clsbdd();
} catch (Exception $e) {
    die("<div class='alert alert-danger'>Error al conectar a la base de datos: " . $e->getMessage() . "</div>");
}

// Procesar Creación o Actualización de Producto en la tabla bas_productos
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['guardar_producto'])) {
    $pro_id           = intval($_POST['pro_id'] ?? 0);
    $pro_codigo       = $bd->esc($_POST['pro_codigo'] ?? '');
    $pro_nombre       = $bd->esc($_POST['pro_nombre'] ?? '');
    $pro_descripcion  = $bd->esc($_POST['pro_descripcion'] ?? '');
    $pro_precio_venta = floatval($_POST['pro_precio_venta'] ?? 0);
    $pro_stock        = intval($_POST['pro_stock'] ?? 0);
    $cat_id           = intval($_POST['cat_id'] ?? 0);
    
    // Lógica para el manejo de la imagen
    $pro_imagen = '';
    
    // Si editamos, recuperamos el nombre de la imagen actual por si no se sube una nueva
    if ($pro_id > 0) {
        $prod_actual = $bd->ejecutar_array("SELECT pro_imagen FROM bas_productos WHERE pro_id = $pro_id");
        if (!empty($prod_actual)) {
            $pro_imagen = $prod_actual[0]['pro_imagen'] ?? '';
        }
    }

    if (isset($_FILES['pro_imagen']) && $_FILES['pro_imagen']['error'] === UPLOAD_ERR_OK) {
        $file_tmp  = $_FILES['pro_imagen']['tmp_name'];
        $file_name = $_FILES['pro_imagen']['name'];
        $ext       = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
        
        $extensiones_permitidas = ['jpg', 'jpeg', 'png', 'webp'];
        
        if (in_array($ext, $extensiones_permitidas)) {
            // Buscamos de forma segura la ruta hacia la carpeta stage/assets/img/productos
            // Subiendo 2 niveles desde vista/productos/ llegamos a la raíz del stage/
            $base_dir = dirname(__DIR__, 2); 
            $dir_subida = $base_dir . '/assets/img/productos/';
            
            if (!is_dir($dir_subida)) {
                mkdir($dir_subida, 0755, true);
            }
            
            // Generar un nombre único limpio basado en el código o timestamp
            $codigo_limpio = preg_replace('/[^a-zA-Z0-9_-]/', '', $pro_codigo);
            $nuevo_nombre = 'prod_' . ($codigo_limpio ?: time()) . '_' . uniqid() . '.' . $ext;
            $ruta_destino = $dir_subida . $nuevo_nombre;
            
            if (move_uploaded_file($file_tmp, $ruta_destino)) {
                // Si ya tenía una imagen previa, se elimina del servidor para optimizar espacio
                if (!empty($pro_imagen) && file_exists($dir_subida . $pro_imagen)) {
                    @unlink($dir_subida . $pro_imagen);
                }
                $pro_imagen = $nuevo_nombre;
            }
        }
    }

    if ($pro_id > 0) {
        $bd->ejecutar("UPDATE bas_productos SET pro_codigo='$pro_codigo', pro_nombre='$pro_nombre', pro_descripcion='$pro_descripcion', pro_precio_venta=$pro_precio_venta, pro_stock=$pro_stock, cat_id=$cat_id, pro_imagen='$pro_imagen' WHERE pro_id=$pro_id");
        echo "<div class='alert alert-success small py-2'>Producto modificado con éxito en el catálogo.</div>";
    } else {
        $bd->carga_campos("pro_codigo, pro_nombre, pro_descripcion, pro_precio_venta, pro_stock, cat_id, pro_imagen, pro_estado");
        $bd->carga_valores("'$pro_codigo', '$pro_nombre', '$pro_descripcion', $pro_precio_venta, $pro_stock, $cat_id, '$pro_imagen', 1");
        $bd->insertar("bas_productos");
        echo "<div class='alert alert-success small py-2'>Nuevo producto ingresado al almacén.</div>";
    }
}

// Procesar Eliminación Lógica de Producto
if (isset($_GET['eliminar'])) {
    $id_del = intval($_GET['eliminar']);
    $bd->ejecutar("UPDATE bas_productos SET pro_estado = 0 WHERE pro_id = $id_del");
    echo "<div class='alert alert-warning small py-2'>Producto removido de la lista activa.</div>";
}

// Cargar Categorías desde la tabla bas_categorias y hacer JOIN con bas_productos
$categorias = $bd->ejecutar_array("SELECT cat_id, cat_nombre FROM bas_categorias WHERE cat_estado=1 ORDER BY cat_nombre ASC") ?: [];
$items = $bd->ejecutar_array("
    SELECT p.*, c.cat_nombre 
    FROM bas_productos p
    LEFT JOIN bas_categorias c ON p.cat_id = c.cat_id
    WHERE p.pro_estado = 1
    ORDER BY p.pro_nombre ASC
") ?: [];
?>

<div class="d-flex justify-content-between align-items-center mb-4">
    <div>
        <h4 class="fw-bold text-dark mb-0"><i class="fas fa-boxes me-2 text-secondary"></i>Catálogo de Productos e Inventario</h4>
        <span class="small text-muted">Módulo exclusivo para la gestión de stocks, precios y almacén.</span>
    </div>
    <button class="btn btn-dark btn-sm rounded-3 shadow-sm px-3" data-bs-toggle="modal" data-bs-target="#modalProducto" onclick="limpiarFormulario()">
        <i class="fas fa-plus me-1"></i> NUEVO ARTÍCULO
    </button>
</div>

<div class="card border-0 shadow-sm rounded-3">
    <div class="card-body p-0">
        <div class="table-responsive">
            <table class="table table-hover align-middle mb-0" style="font-size: 0.9rem;">
                <thead class="table-light text-uppercase">
                    <tr>
                        <th class="ps-3" style="width: 70px;">Imagen</th>
                        <th>Código Interno</th>
                        <th>Descripción del Artículo</th>
                        <th>Categoría</th>
                        <th class="text-end">Precio Venta</th>
                        <th class="text-center">Existencias</th>
                        <th class="text-center">Estado Almacén</th>
                        <th class="text-center pe-3">Acciones</th>
                    </tr>
                </thead>
                <tbody>
                    <?php if(empty($items)): ?>
                        <tr><td colspan="8" class="text-center py-4 text-muted">No existen registros en el inventario actual.</td></tr>
                    <?php endif; ?>
                    <?php foreach($items as $i): 
                        $stock = intval($i['pro_stock']);
                        $status_badge = $stock <= 0 ? '<span class="badge bg-danger-subtle text-danger">Agotado</span>' : ($stock < 5 ? '<span class="badge bg-warning-subtle text-warning">Stock Bajo</span>' : '<span class="badge bg-success-subtle text-success">Disponible</span>');
                        
                        // Validar visualización física en la ruta de assets
                        $src_img = 'assets/img/no-image.png'; 
                        if (!empty($i['pro_imagen']) && file_exists(dirname(__DIR__, 2) . '/assets/img/productos/' . $i['pro_imagen'])) {
                            $src_img = 'assets/img/productos/' . $i['pro_imagen'];
                        }
                    ?>
                        <tr>
                            <td class="ps-3">
                                <img src="<?= $src_img ?>" alt="Prod" class="rounded border shadow-sm" style="width: 40px; height: 40px; object-fit: cover;">
                            </td>
                            <td class="fw-mono"><?= htmlspecialchars($i['pro_codigo']) ?></td>
                            <td>
                                <div class="fw-bold text-secondary"><?= htmlspecialchars($i['pro_nombre']) ?></div>
                                <small class="text-muted text-truncate d-inline-block" style="max-width: 250px;"><?= htmlspecialchars($i['pro_descripcion'] ?? '') ?></small>
                            </td>
                            <td><span class="badge bg-light text-dark border"><?= htmlspecialchars($i['cat_nombre'] ?? 'Sin Categoría') ?></span></td>
                            <td class="text-end fw-bold text-dark">$<?= number_format($i['pro_precio_venta'], 2) ?></td>
                            <td class="text-center fw-bold <?= $stock < 3 ? 'text-danger':'' ?>"><?= $stock ?> u.</td>
                            <td class="text-center"><?= $status_badge ?></td>
                            <td class="text-center pe-3">
                                <button class="btn btn-sm btn-outline-secondary py-1 px-2 border-0" 
                                        onclick="editarProducto(<?= $i['pro_id'] ?>, '<?= addslashes($i['pro_codigo']) ?>', '<?= addslashes($i['pro_nombre']) ?>', '<?= addslashes($i['pro_descripcion'] ?? '') ?>', <?= $i['pro_precio_venta'] ?>, <?= $i['pro_stock'] ?>, <?= intval($i['cat_id']) ?>)">
                                    <i class="fas fa-edit"></i>
                                </button>
                                <a href="index.php?page=productos/inventario&eliminar=<?= $i['pro_id'] ?>" class="btn btn-sm btn-outline-danger py-1 px-2 border-0" onclick="return confirm('¿Seguro que desea dar de baja este producto?')">
                                    <i class="fas fa-trash-alt"></i>
                                </a>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

<div class="modal fade" id="modalProducto" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <form method="post" enctype="multipart/form-data" class="modal-content border-0 shadow">
            <div class="modal-header bg-light">
                <h6 class="modal-title fw-bold text-dark" id="modalTitulo">Registrar Artículo</h6>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <input type="hidden" name="pro_id" id="form_pro_id" value="0">
                
                <div class="row g-2 mb-3">
                    <div class="col-5">
                        <label class="form-label small fw-bold">Código SKU / Único</label>
                        <input type="text" name="pro_codigo" id="form_pro_codigo" class="form-control form-control-sm" required placeholder="Ej: ROP-001">
                    </div>
                    <div class="col-7">
                        <label class="form-label small fw-bold">Nombre del Producto</label>
                        <input type="text" name="pro_nombre" id="form_pro_nombre" class="form-control form-control-sm" required placeholder="Ej: Vestido de Competencia">
                    </div>
                </div>

                <div class="mb-3">
                    <label class="form-label small fw-bold">Categoría (Ropa, Bastones, etc.)</label>
                    <select name="cat_id" id="form_cat_id" class="form-select form-select-sm" required>
                        <option value="">-- Seleccionar Categoría --</option>
                        <?php foreach($categorias as $c): ?>
                            <option value="<?= $c['cat_id'] ?>"><?= htmlspecialchars($c['cat_nombre']) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="mb-3">
                    <label class="form-label small fw-bold">Descripción / Detalles</label>
                    <textarea name="pro_descripcion" id="form_pro_descripcion" class="form-control form-control-sm" rows="2" placeholder="Especificaciones, tallas, colores..."></textarea>
                </div>

                <div class="row g-3 mb-3">
                    <div class="col-6">
                        <label class="form-label small fw-bold">Precio de Venta ($)</label>
                        <input type="number" name="pro_precio_venta" id="form_pro_precio_venta" class="form-control form-control-sm" step="0.01" required value="0.00">
                    </div>
                    <div class="col-6">
                        <label class="form-label small fw-bold">Stock Inicial / Disponible</label>
                        <input type="number" name="pro_stock" id="form_pro_stock" class="form-control form-control-sm" required value="0">
                    </div>
                </div>

                <div class="mb-1">
                    <label class="form-label small fw-bold">Imagen del Producto</label>
                    <input type="file" name="pro_imagen" id="form_pro_imagen" class="form-control form-control-sm" accept="image/png, image/jpeg, image/jpg, image/webp">
                    <div class="form-text text-muted" style="font-size: 0.75rem;">Extensiones aceptadas: JPG, PNG o WEBP. Vacío para conservar la actual.</div>
                </div>
            </div>
            <div class="modal-footer bg-light py-2">
                <button type="submit" name="guardar_producto" class="btn btn-sm btn-dark px-3 fw-bold">GUARDAR DATOS</button>
            </div>
        </form>
    </div>
</div>

<script>
function limpiarFormulario() {
    document.getElementById('form_pro_id').value = '0';
    document.getElementById('form_pro_codigo').value = '';
    document.getElementById('form_pro_nombre').value = '';
    document.getElementById('form_pro_descripcion').value = '';
    document.getElementById('form_pro_precio_venta').value = '0.00';
    document.getElementById('form_pro_stock').value = '0';
    document.getElementById('form_cat_id').value = '';
    document.getElementById('form_pro_imagen').value = ''; // Limpiar el input de archivo
    document.getElementById('modalTitulo').innerText = 'Registrar Artículo';
}

function editarProducto(id, codigo, nombre, descripcion, precio, stock, categoria) {
    document.getElementById('form_pro_id').value = id;
    document.getElementById('form_pro_codigo').value = codigo;
    document.getElementById('form_pro_nombre').value = nombre;
    document.getElementById('form_pro_descripcion').value = descripcion;
    document.getElementById('form_pro_precio_venta').value = precio;
    document.getElementById('form_pro_stock').value = stock;
    document.getElementById('form_cat_id').value = categoria;
    document.getElementById('form_pro_imagen').value = ''; // Se limpia para subidas nuevas voluntarias
    document.getElementById('modalTitulo').innerText = 'Modificar Parámetros de Artículo';
    
    var elModal = document.getElementById('modalProducto');
    var modal = bootstrap.Modal.getInstance(elModal) || new bootstrap.Modal(elModal);
    modal.show();
}
</script>