<?php
require_once __DIR__ . '/../../config/config.php';
require_once __DIR__ . '/../../config/database.php';
requireLogin();

$pageTitle = 'Reporte de Gastos de Inventario';
require_once __DIR__ . '/../../includes/header.php';

$db = getDB();

// Filtros
$fecha_inicio = $_GET['fecha_inicio'] ?? date('Y-m-01'); // Primer día del mes actual
$fecha_fin = $_GET['fecha_fin'] ?? date('Y-m-d'); // Hoy
$insumo_id = $_GET['insumo_id'] ?? '';
$orden_id = $_GET['orden_id'] ?? '';

// Construir consulta
$sql = "
    SELECT 
        mi.id,
        mi.fecha_movimiento,
        mi.cantidad,
        mi.motivo,
        mi.stock_anterior,
        mi.stock_nuevo,
        i.nombre as insumo,
        i.unidad_medida as unidad,
        ic.nombre as categoria,
        o.codigo as orden_codigo,
        o.id as orden_id,
        p.nombre as paciente,
        u.nombre as usuario
    FROM movimientos_inventario mi
    INNER JOIN insumos i ON mi.insumo_id = i.id
    LEFT JOIN categorias_insumos ic ON i.categoria_id = ic.id
    LEFT JOIN ordenes o ON mi.orden_id = o.id
    LEFT JOIN pacientes p ON o.paciente_id = p.id
    LEFT JOIN usuarios u ON mi.usuario_id = u.id
    WHERE mi.tipo = 'salida'
    AND mi.orden_id IS NOT NULL
    AND DATE(mi.fecha_movimiento) BETWEEN ? AND ?
";

$params = [$fecha_inicio, $fecha_fin];

if (!empty($insumo_id)) {
    $sql .= " AND mi.insumo_id = ?";
    $params[] = $insumo_id;
}

if (!empty($orden_id)) {
    $sql .= " AND mi.orden_id = ?";
    $params[] = $orden_id;
}

$sql .= " ORDER BY mi.fecha_movimiento DESC";

$stmt = $db->prepare($sql);
$stmt->execute($params);
$gastos = $stmt->fetchAll();

// Calcular totales por insumo
$sqlTotales = "
    SELECT 
        i.nombre as insumo,
        i.unidad_medida as unidad,
        ic.nombre as categoria,
        SUM(mi.cantidad) as total_cantidad,
        COUNT(DISTINCT mi.orden_id) as ordenes_count
    FROM movimientos_inventario mi
    INNER JOIN insumos i ON mi.insumo_id = i.id
    LEFT JOIN categorias_insumos ic ON i.categoria_id = ic.id
    WHERE mi.tipo = 'salida'
    AND mi.orden_id IS NOT NULL
    AND DATE(mi.fecha_movimiento) BETWEEN ? AND ?
";

$paramsTotales = [$fecha_inicio, $fecha_fin];

if (!empty($insumo_id)) {
    $sqlTotales .= " AND mi.insumo_id = ?";
    $paramsTotales[] = $insumo_id;
}

if (!empty($orden_id)) {
    $sqlTotales .= " AND mi.orden_id = ?";
    $paramsTotales[] = $orden_id;
}

$sqlTotales .= " GROUP BY i.id, i.nombre, i.unidad_medida, ic.nombre ORDER BY total_cantidad DESC";

$stmtTotales = $db->prepare($sqlTotales);
$stmtTotales->execute($paramsTotales);
$totales = $stmtTotales->fetchAll();

// Obtener lista de insumos para filtro
$stmtInsumos = $db->query("SELECT id, nombre FROM insumos WHERE activo = 1 ORDER BY nombre");
$insumos = $stmtInsumos->fetchAll();
?>

<div class="container-fluid">
    <div class="row mb-4">
        <div class="col-md-8">
            <h1 class="h3 mb-0"><i class="bi bi-graph-down"></i> <?= $pageTitle ?></h1>
            <p class="text-muted">Gastos de inventario asociados a órdenes</p>
        </div>
        <div class="col-md-4 text-end">
            <button onclick="window.print()" class="btn btn-outline-primary">
                <i class="bi bi-printer"></i> Imprimir
            </button>
            <button onclick="exportarExcel()" class="btn btn-outline-success">
                <i class="bi bi-file-excel"></i> Exportar Excel
            </button>
        </div>
    </div>
    
    <!-- Filtros -->
    <div class="card mb-4 no-print">
        <div class="card-body">
            <form method="GET" action="">
                <div class="row g-3">
                    <div class="col-md-3">
                        <label class="form-label">Fecha Inicio</label>
                        <input type="date" name="fecha_inicio" class="form-control" value="<?= htmlspecialchars($fecha_inicio) ?>">
                    </div>
                    
                    <div class="col-md-3">
                        <label class="form-label">Fecha Fin</label>
                        <input type="date" name="fecha_fin" class="form-control" value="<?= htmlspecialchars($fecha_fin) ?>">
                    </div>
                    
                    <div class="col-md-3">
                        <label class="form-label">Insumo</label>
                        <select name="insumo_id" class="form-select">
                            <option value="">Todos los insumos</option>
                            <?php foreach ($insumos as $ins): ?>
                            <option value="<?= $ins['id'] ?>" <?= $insumo_id == $ins['id'] ? 'selected' : '' ?>>
                                <?= htmlspecialchars($ins['nombre']) ?>
                            </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div class="col-md-3">
                        <label class="form-label">Orden ID</label>
                        <input type="number" name="orden_id" class="form-control" placeholder="ID de orden..." value="<?= htmlspecialchars($orden_id) ?>">
                    </div>
                    
                    <div class="col-12">
                        <button type="submit" class="btn btn-primary">
                            <i class="bi bi-search"></i> Buscar
                        </button>
                        <a href="gastos_inventario.php" class="btn btn-outline-secondary">
                            <i class="bi bi-x-circle"></i> Limpiar Filtros
                        </a>
                    </div>
                </div>
            </form>
        </div>
    </div>
    
    <!-- Resumen de Totales -->
    <?php if (count($totales) > 0): ?>
    <div class="card mb-4">
        <div class="card-header">
            <h5 class="card-title mb-0"><i class="bi bi-pie-chart"></i> Resumen por Insumo</h5>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-sm table-hover">
                    <thead>
                        <tr>
                            <th>Categoría</th>
                            <th>Insumo</th>
                            <th class="text-end">Total Gastado</th>
                            <th class="text-center">Órdenes</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($totales as $total): ?>
                        <tr>
                            <td>
                                <?php if ($total['categoria']): ?>
                                <span class="badge bg-secondary"><?= htmlspecialchars($total['categoria']) ?></span>
                                <?php endif; ?>
                            </td>
                            <td><?= htmlspecialchars($total['insumo']) ?></td>
                            <td class="text-end">
                                <strong><?= number_format($total['total_cantidad'], 2) ?></strong> <?= htmlspecialchars($total['unidad']) ?>
                            </td>
                            <td class="text-center">
                                <span class="badge bg-info"><?= $total['ordenes_count'] ?></span>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <?php endif; ?>
    
    <!-- Detalle de Gastos -->
    <div class="card">
        <div class="card-header">
            <h5 class="card-title mb-0">
                <i class="bi bi-list-ul"></i> Detalle de Movimientos
                <span class="badge bg-primary"><?= count($gastos) ?> registros</span>
            </h5>
        </div>
        <div class="card-body">
            <?php if (count($gastos) > 0): ?>
            <div class="table-responsive">
                <table class="table table-hover" id="tablaGastos">
                    <thead>
                        <tr>
                            <th>Fecha</th>
                            <th>Orden</th>
                            <th>Paciente</th>
                            <th>Insumo</th>
                            <th class="text-end">Cantidad</th>
                            <th class="text-end">Stock Anterior</th>
                            <th class="text-end">Stock Nuevo</th>
                            <th>Motivo</th>
                            <th>Usuario</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($gastos as $gasto): ?>
                        <tr>
                            <td><small><?= formatDateTime($gasto['fecha_movimiento']) ?></small></td>
                            <td>
                                <a href="<?= SITE_URL ?>/modules/ordenes/view.php?id=<?= $gasto['orden_id'] ?>" target="_blank">
                                    <?= htmlspecialchars($gasto['orden_codigo']) ?>
                                </a>
                            </td>
                            <td><?= htmlspecialchars($gasto['paciente'] ?? '-') ?></td>
                            <td>
                                <?php if ($gasto['categoria']): ?>
                                <small class="text-muted"><?= htmlspecialchars($gasto['categoria']) ?></small><br>
                                <?php endif; ?>
                                <?= htmlspecialchars($gasto['insumo']) ?>
                            </td>
                            <td class="text-end">
                                <span class="badge bg-danger"><?= number_format($gasto['cantidad'], 2) ?> <?= htmlspecialchars($gasto['unidad']) ?></span>
                            </td>
                            <td class="text-end"><?= number_format($gasto['stock_anterior'], 2) ?></td>
                            <td class="text-end">
                                <span class="<?= $gasto['stock_nuevo'] < 0 ? 'text-danger fw-bold' : '' ?>">
                                    <?= number_format($gasto['stock_nuevo'], 2) ?>
                                </span>
                            </td>
                            <td><small><?= htmlspecialchars($gasto['motivo'] ?? '-') ?></small></td>
                            <td><small><?= htmlspecialchars($gasto['usuario'] ?? '-') ?></small></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
            <?php else: ?>
            <div class="alert alert-info">
                <i class="bi bi-info-circle"></i> No se encontraron gastos de inventario en el rango de fechas seleccionado.
            </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<style>
@media print {
    .no-print {
        display: none !important;
    }
    .table {
        font-size: 10px;
    }
    .card {
        border: none;
        box-shadow: none;
    }
}
</style>

<script>
$(document).ready(function() {
    $('#tablaGastos').DataTable({
        language: {
            url: '//cdn.datatables.net/plug-ins/1.13.7/i18n/es-ES.json'
        },
        order: [[0, 'desc']],
        pageLength: 50,
        dom: 'Bfrtip',
        buttons: []
    });
});

function exportarExcel() {
    // Crear una tabla temporal con los datos
    const table = document.getElementById('tablaGastos');
    const rows = table.querySelectorAll('tbody tr');
    
    let csv = 'Fecha,Orden,Paciente,Insumo,Cantidad,Stock Anterior,Stock Nuevo,Motivo,Usuario\n';
    
    rows.forEach(row => {
        const cells = row.querySelectorAll('td');
        const rowData = [];
        
        // Extraer texto de cada celda
        cells.forEach((cell, index) => {
            let text = cell.textContent.trim().replace(/\n/g, ' ').replace(/,/g, ';');
            rowData.push('"' + text + '"');
        });
        
        csv += rowData.join(',') + '\n';
    });
    
    // Descargar
    const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    const link = document.createElement('a');
    const url = URL.createObjectURL(blob);
    
    link.setAttribute('href', url);
    link.setAttribute('download', 'gastos_inventario_' + new Date().toISOString().split('T')[0] + '.csv');
    link.style.visibility = 'hidden';
    
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}
</script>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>
