<?php
include "is_logged.php";
require_once "../db.php";
require_once "../php_conexion.php";
require_once "../funciones.php";

// ====================== CONTROL DE PERMISOS ======================
$user_id = $_SESSION['id_users'] ?? 0;
$id_g = $_SESSION['id'] ?? 0;
include "../permisos.php";
get_cadena($user_id);
$modulo = "Productos";
permisos($modulo, $cadena_permisos);
// ====================== FIN CONTROL DE PERMISOS ======================

$action = $_REQUEST['action'] ?? '';

if ($action === 'ajax') {
    // ====================== CONFIGURACIÓN Y VALIDACIÓN ======================
    $daterange = filter_input(INPUT_GET, 'range', FILTER_SANITIZE_STRING) ?? '';
    $id_producto = intval($id_g);
    
    // Validar producto
    if ($id_producto <= 0) {
        echo json_encode(['error' => 'ID de producto inválido']);
        exit;
    }

    // Configuración de paginación
    $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, [
        'options' => ['default' => 1, 'min_range' => 1]
    ]);
    $per_page = 50; // Reducido para mejor visualización
    $adjacents = 4;
    $offset = ($page - 1) * $per_page;

    // ====================== CONSTRUIR CONSULTA ======================
    $conditions = ["kardex.producto_kardex = productos.id_producto", 
                   "kardex.producto_kardex = $id_producto"];

    // Filtro por rango de fechas
    if (!empty($daterange)) {
        $date_parts = explode(" - ", $daterange);
        if (count($date_parts) === 2) {
            $fecha_inicio = DateTime::createFromFormat('d/m/Y', trim($date_parts[0]));
            $fecha_fin = DateTime::createFromFormat('d/m/Y', trim($date_parts[1]));
            
            if ($fecha_inicio && $fecha_fin) {
                $fecha_inicio->setTime(0, 0, 0);
                $fecha_fin->setTime(23, 59, 59);
                
                $fecha_inicial = $fecha_inicio->format('Y-m-d H:i:s');
                $fecha_final = $fecha_fin->format('Y-m-d H:i:s');
                
                $conditions[] = "kardex.fecha_kardex BETWEEN '$fecha_inicial' AND '$fecha_final'";
            }
        }
    }

    $where_clause = implode(' AND ', $conditions);

    // ====================== OBTENER TOTAL DE REGISTROS ======================
    $count_sql = "SELECT COUNT(*) as total_registros 
                  FROM kardex 
                  INNER JOIN productos ON kardex.producto_kardex = productos.id_producto
                  WHERE $where_clause";
    
    $count_result = mysqli_query($conexion, $count_sql);
    
    if (!$count_result) {
        die('Error al contar registros: ' . mysqli_error($conexion));
    }
    
    $count_data = mysqli_fetch_assoc($count_result);
    $total_registros = $count_data['total_registros'] ?? 0;
    $total_paginas = ceil($total_registros / $per_page);

    // ====================== OBTENER DATOS CON PAGINACIÓN ======================
    $sql = "SELECT 
                kardex.*,
                productos.nombre_producto,
                productos.codigo_producto,
                productos.costo_producto as costo_actual
            FROM kardex
            INNER JOIN productos ON kardex.producto_kardex = productos.id_producto
            WHERE $where_clause
            ORDER BY kardex.fecha_kardex DESC, kardex.id_kardex DESC
            LIMIT $offset, $per_page";

    $resultado = mysqli_query($conexion, $sql);

    if (!$resultado) {
        die('Error al obtener datos: ' . mysqli_error($conexion));
    }

    // ====================== CONFIGURACIONES GENERALES ======================
    $simbolo_moneda = get_row('perfil', 'moneda', 'id_perfil', 1) ?? '$';
    
    // Definición de tipos de movimiento
    $tipos_movimiento = [
        1 => ['nombre' => 'COMPRA', 'icono' => '🛒', 'color' => 'success'],
        2 => ['nombre' => 'VENTA', 'icono' => '💰', 'color' => 'danger'],
        3 => ['nombre' => 'AJUSTE ENTRADA', 'icono' => '⬆️', 'color' => 'info'],
        4 => ['nombre' => 'AJUSTE SALIDA', 'icono' => '⬇️', 'color' => 'warning'],
        5 => ['nombre' => 'INVENTARIO INICIAL', 'icono' => '📦', 'color' => 'primary'],
        6 => ['nombre' => 'DEVOLUCIÓN', 'icono' => '↩️', 'color' => 'secondary'],
        7 => ['nombre' => 'TRASLADO', 'icono' => '🚚', 'color' => 'dark']
    ];

    // ====================== PROCESAR DATOS ======================
    $movimientos = [];
    $resumen = [
        'entradas_cantidad' => 0,
        'entradas_valor' => 0,
        'salidas_cantidad' => 0,
        'salidas_valor' => 0,
        'saldo_actual' => 0,
        'valor_actual' => 0
    ];

    while ($fila = mysqli_fetch_assoc($resultado)) {
        $tipo_id = $fila['tipo_movimiento'] ?? 0;
        $tipo_info = $tipos_movimiento[$tipo_id] ?? ['nombre' => 'DESCONOCIDO', 'icono' => '❓', 'color' => 'light'];
        
        $movimiento = [
            'id' => $fila['id_kardex'],
            'fecha' => date("d/m/Y H:i", strtotime($fila['fecha_kardex'])),
            'fecha_raw' => $fila['fecha_kardex'],
            'tipo' => $tipo_info['nombre'],
            'icono' => $tipo_info['icono'],
            'color' => $tipo_info['color'],
            
            // Entradas
            'entrada_cantidad' => floatval($fila['cant_entrada']),
            'entrada_costo' => floatval($fila['costo_entrada']),
            'entrada_total' => floatval($fila['total_entrada']),
            
            // Salidas
            'salida_cantidad' => floatval($fila['cant_salida']),
            'salida_costo' => floatval($fila['costo_salida']),
            'salida_total' => floatval($fila['total_salida']),
            
            // Saldo
            'saldo_cantidad' => floatval($fila['cant_saldo']),
            'saldo_costo' => floatval($fila['costo_saldo']),
            'saldo_total' => floatval($fila['total_saldo']),
            
            // Información del producto
            'producto_nombre' => $fila['nombre_producto'],
            'producto_codigo' => $fila['codigo_producto'],
            'costo_actual' => floatval($fila['costo_actual'])
        ];
        
        $movimientos[] = $movimiento;
        
        // Actualizar resumen
        $resumen['entradas_cantidad'] += $movimiento['entrada_cantidad'];
        $resumen['entradas_valor'] += $movimiento['entrada_total'];
        $resumen['salidas_cantidad'] += $movimiento['salida_cantidad'];
        $resumen['salidas_valor'] += $movimiento['salida_total'];
        $resumen['saldo_actual'] = $movimiento['saldo_cantidad'];
        $resumen['valor_actual'] = $movimiento['saldo_total'];
    }

    // ====================== MOSTRAR RESULTADOS ======================
    if ($total_registros > 0) {
        $registro_inicial = $offset + 1;
        $registro_final = min($offset + count($movimientos), $total_registros);
        ?>
        <style>
            /* ESTILOS MEJORADOS */
            .card-kardex {
                border: none;
                box-shadow: 0 2px 15px rgba(0,0,0,0.08);
                border-radius: 10px;
                overflow: hidden;
            }
            
            .header-kardex {
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                color: white;
                padding: 20px;
                border-radius: 10px 10px 0 0;
            }
            
            .table-kardex {
                margin: 0;
                border-collapse: separate;
                border-spacing: 0;
            }
            
            .table-kardex thead th {
                background-color: #f8fafc;
                border-bottom: 2px solid #e2e8f0;
                font-weight: 600;
                color: #4a5568;
                padding: 12px 8px;
                position: sticky;
                top: 0;
                z-index: 10;
            }
            
            .table-kardex tbody tr {
                transition: all 0.2s ease;
            }
            
            .table-kardex tbody tr:hover {
                background-color: #f7fafc;
                transform: translateY(-1px);
                box-shadow: 0 2px 5px rgba(0,0,0,0.05);
            }
            
            .table-kardex td {
                padding: 10px 8px;
                vertical-align: middle;
                border-color: #edf2f7;
            }
            
            .badge-movimiento {
                padding: 4px 8px;
                border-radius: 20px;
                font-size: 12px;
                font-weight: 500;
            }
            
            .cell-entrada {
                background-color: rgba(72, 187, 120, 0.1);
                border-left: 3px solid #48bb78;
            }
            
            .cell-salida {
                background-color: rgba(245, 101, 101, 0.1);
                border-left: 3px solid #f56565;
            }
            
            .cell-saldo {
                background-color: rgba(66, 153, 225, 0.1);
                border-left: 3px solid #4299e1;
            }
            
            .resumen-box {
                background: #f8fafc;
                border-radius: 8px;
                padding: 15px;
                margin: 10px 0;
                border-left: 4px solid #4299e1;
            }
            
            .valor-positivo {
                color: #38a169;
                font-weight: 600;
            }
            
            .valor-negativo {
                color: #e53e3e;
                font-weight: 600;
            }
            
            .valor-neutral {
                color: #4a5568;
                font-weight: 600;
            }
            
            .pagination-container {
                background: #f8fafc;
                padding: 15px;
                border-radius: 8px;
                margin-top: 20px;
            }
            
            @media (max-width: 768px) {
                .table-kardex {
                    font-size: 14px;
                }
                
                .table-kardex th,
                .table-kardex td {
                    padding: 6px 4px;
                }
                
                .header-kardex h5 {
                    font-size: 1.1rem;
                }
            }
        </style>

        <div class="card card-kardex">
            <!-- ENCABEZADO -->
            <div class="header-kardex">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h5 class="mb-1">
                            <i class="fas fa-exchange-alt mr-2"></i>
                            KARDEX - HISTORIAL DE MOVIMIENTOS
                        </h5>
                        <p class="mb-0 opacity-75">
                            Producto: <strong><?php echo htmlspecialchars($movimientos[0]['producto_nombre'] ?? ''); ?></strong>
                            | Código: <?php echo htmlspecialchars($movimientos[0]['producto_codigo'] ?? ''); ?>
                        </p>
                    </div>
                    <div class="text-right">
                        <span class="badge bg-white text-primary p-2">
                            <i class="fas fa-chart-line mr-1"></i>
                            Registros <?php echo $registro_inicial; ?>-<?php echo $registro_final; ?> de <?php echo $total_registros; ?>
                        </span>
                    </div>
                </div>
            </div>
            
            <!-- RESUMEN RÁPIDO -->
            <div class="card-body py-3">
                <div class="row">
                    <div class="col-md-3">
                        <div class="resumen-box">
                            <small class="text-muted d-block">ENTRADAS TOTALES</small>
                            <div class="d-flex align-items-center">
                                <span class="valor-positivo h5 mb-0"><?php echo number_format($resumen['entradas_cantidad'], 2); ?></span>
                                <small class="ml-2 text-muted">unidades</small>
                            </div>
                            <div class="mt-1"><?php echo formato($resumen['entradas_valor']); ?></div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="resumen-box">
                            <small class="text-muted d-block">SALIDAS TOTALES</small>
                            <div class="d-flex align-items-center">
                                <span class="valor-negativo h5 mb-0"><?php echo number_format($resumen['salidas_cantidad'], 2); ?></span>
                                <small class="ml-2 text-muted">unidades</small>
                            </div>
                            <div class="mt-1"><?php echo formato($resumen['salidas_valor']); ?></div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="resumen-box">
                            <small class="text-muted d-block">STOCK ACTUAL</small>
                            <div class="d-flex align-items-center">
                                <span class="valor-neutral h5 mb-0"><?php echo number_format($resumen['saldo_actual'], 2); ?></span>
                                <small class="ml-2 text-muted">unidades</small>
                            </div>
                            <div class="mt-1"><?php echo formato($resumen['valor_actual']); ?></div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="resumen-box">
                            <small class="text-muted d-block">COSTO PROMEDIO</small>
                            <div class="valor-neutral h5 mb-0">
                                <?php 
                                $costo_promedio = ($resumen['saldo_actual'] > 0) ? 
                                    $resumen['valor_actual'] / $resumen['saldo_actual'] : 0;
                                echo formato($costo_promedio);
                                ?>
                            </div>
                            <small class="text-muted mt-1 d-block">Costo unitario actual</small>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- TABLA DE MOVIMIENTOS -->
            <div class="table-responsive">
                <table class="table table-kardex">
                    <thead>
                        <tr class="text-center">
                            <th width="12%">FECHA Y HORA</th>
                            <th width="14%">TIPO DE MOVIMIENTO</th>
                            <th colspan="3" class="bg-success-light">ENTRADAS</th>
                            <th colspan="3" class="bg-danger-light">SALIDAS</th>
                            <th colspan="3" class="bg-info-light">SALDO</th>
                        </tr>
                        <tr class="text-center">
                            <th></th>
                            <th></th>
                            <!-- Encabezados Entradas -->
                            <th width="6%">CANT.</th>
                            <th width="10%">COSTO</th>
                            <th width="10%">TOTAL</th>
                            <!-- Encabezados Salidas -->
                            <th width="6%">CANT.</th>
                            <th width="10%">COSTO</th>
                            <th width="10%">TOTAL</th>
                            <!-- Encabezados Saldo -->
                            <th width="6%">CANT.</th>
                            <th width="10%">COSTO</th>
                            <th width="10%">TOTAL</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($movimientos as $mov): ?>
                        <tr class="text-center">
                            <!-- Fecha y Tipo -->
                            <td class="text-muted small"><?php echo $mov['fecha']; ?></td>
                            <td>
                                <span class="badge-movimiento badge-<?php echo $mov['color']; ?>">
                                    <?php echo $mov['icono']; ?> <?php echo $mov['tipo']; ?>
                                </span>
                            </td>
                            
                            <!-- Entradas -->
                            <td class="cell-entrada <?php echo $mov['entrada_cantidad'] > 0 ? 'valor-positivo' : ''; ?>">
                                <?php echo $mov['entrada_cantidad'] > 0 ? number_format($mov['entrada_cantidad'], 2) : '-'; ?>
                            </td>
                            <td class="cell-entrada">
                                <?php echo $mov['entrada_cantidad'] > 0 ? formato($mov['entrada_costo']) : '-'; ?>
                            </td>
                            <td class="cell-entrada valor-positivo">
                                <?php echo $mov['entrada_total'] > 0 ? formato($mov['entrada_total']) : '-'; ?>
                            </td>
                            
                            <!-- Salidas -->
                            <td class="cell-salida <?php echo $mov['salida_cantidad'] > 0 ? 'valor-negativo' : ''; ?>">
                                <?php echo $mov['salida_cantidad'] > 0 ? number_format($mov['salida_cantidad'], 2) : '-'; ?>
                            </td>
                            <td class="cell-salida">
                                <?php echo $mov['salida_cantidad'] > 0 ? formato($mov['salida_costo']) : '-'; ?>
                            </td>
                            <td class="cell-salida valor-negativo">
                                <?php echo $mov['salida_total'] > 0 ? formato($mov['salida_total']) : '-'; ?>
                            </td>
                            
                            <!-- Saldo -->
                            <td class="cell-saldo">
                                <?php echo number_format($mov['saldo_cantidad'], 2); ?>
                            </td>
                            <td class="cell-saldo">
                                <?php echo formato($mov['saldo_costo']); ?>
                            </td>
                            <td class="cell-saldo valor-neutral">
                                <?php echo formato($mov['saldo_total']); ?>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
            
            <!-- PIE DE PÁGINA CON PAGINACIÓN -->
            <div class="card-footer">
                <div class="row align-items-center">
                    <div class="col-md-6">
                        <div class="text-muted small">
                            <i class="fas fa-info-circle mr-1"></i>
                            Mostrando <?php echo $registro_inicial; ?> al <?php echo $registro_final; ?> 
                            de <?php echo $total_registros; ?> movimientos
                        </div>
                    </div>
                    <div class="col-md-6">
                        <?php 
                        $reload = 'kardex_ajax.php';
                        if ($total_paginas > 1) {
                            echo '<div class="pagination-container">';
                            echo paginate($reload, $page, $total_paginas, $adjacents);
                            echo '</div>';
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
        <?php
    } else {
        // ====================== SIN RESULTADOS ======================
        ?>
        <div class="text-center py-5">
            <div class="empty-state">
                <i class="fas fa-clipboard-list fa-3x text-muted mb-3"></i>
                <h4 class="text-muted">No hay movimientos registrados</h4>
                <p class="text-muted">No se encontraron movimientos para este producto en el período seleccionado.</p>
                <button class="btn btn-outline-primary mt-2" onclick="location.reload()">
                    <i class="fas fa-sync-alt mr-1"></i> Recargar
                </button>
            </div>
        </div>
        <?php
    }
}
?>