<?php
session_start();
require_once '../includes/db.php';
require_once '../includes/header.php';

// Verificar si el usuario está logueado y es administrador
if (!isset($_SESSION['usuario_id']) || $_SESSION['rol'] !== 'admin') {
    header('Location: login.php');
    exit;
}

$db = new Database();
$pdo = $db->getPDO();

// Obtener configuración actual
$stmt = $pdo->prepare("SELECT color_principal, color_secundario, color_fondo, color_texto, favicon FROM configuracion LIMIT 1");
$stmt->execute();
$config = $stmt->fetch(PDO::FETCH_ASSOC);

// Paginación
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 20;
$offset = ($page - 1) * $limit;

// Filtros
$where = "1=1";
$params = [];

if (isset($_GET['buscar']) && !empty($_GET['buscar'])) {
    $buscar = '%' . $_GET['buscar'] . '%';
    $where .= " AND (f.cliente_nombre LIKE ? OR f.cliente_ruc LIKE ? OR f.factura_numero LIKE ? OR f.producto_titulo LIKE ?)";
    $params = array_merge($params, [$buscar, $buscar, $buscar, $buscar]);
}

if (isset($_GET['desde']) && !empty($_GET['desde'])) {
    $where .= " AND DATE(f.fecha_factura) >= ?";
    $params[] = $_GET['desde'];
}

if (isset($_GET['hasta']) && !empty($_GET['hasta'])) {
    $where .= " AND DATE(f.fecha_factura) <= ?";
    $params[] = $_GET['hasta'];
}

if (isset($_GET['condicion']) && !empty($_GET['condicion'])) {
    $where .= " AND f.condicion = ?";
    $params[] = $_GET['condicion'];
}

if (isset($_GET['estado']) && !empty($_GET['estado'])) {
    $where .= " AND f.estado = ?";
    $params[] = $_GET['estado'];
}

// Obtener total de registros para paginación
try {
    $stmtCount = $pdo->prepare("
        SELECT COUNT(DISTINCT f.factura_numero) as total
        FROM facturados f 
        WHERE $where
    ");
    $stmtCount->execute($params);
    $totalRegistros = $stmtCount->fetchColumn();
    $totalPaginas = ceil($totalRegistros / $limit);
} catch (PDOException $e) {
    // Si hay error, establecer valores predeterminados
    $totalRegistros = 0;
    $totalPaginas = 1;
    
    // Si no hay mensaje de error establecido aún
    if (empty($_SESSION['mensaje_error'])) {
        $_SESSION['mensaje_error'] = "Error al contar registros: " . $e->getMessage();
    }
}

// Obtener datos agrupados por factura
try {
    $sql = "
        SELECT 
            f.factura_numero,
            MAX(f.cliente_nombre) as cliente_nombre,
            MAX(f.cliente_ruc) as cliente_ruc,
            MAX(f.condicion) as condicion,
            MAX(f.cdc) as cdc,
            MAX(f.estado) as estado,
            MAX(DATE(f.fecha_factura)) as fecha,
            SUM(f.total) as monto_total,
            COUNT(f.id) as cantidad_items,
            MAX(f.dias_credito) as dias_credito
        FROM facturados f
        WHERE $where
        GROUP BY f.factura_numero
        ORDER BY MAX(f.fecha_factura) DESC
        LIMIT $offset, $limit
    ";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $facturas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Obtener totales para mostrar en la interfaz (sin límite)
    $sqlTotales = "
        SELECT 
            COUNT(DISTINCT f.factura_numero) as total_facturas,
            SUM(f.total) as monto_total,
            SUM(CASE WHEN f.condicion = 'contado' THEN f.total ELSE 0 END) as total_contado,
            SUM(CASE WHEN f.condicion = 'credito' THEN f.total ELSE 0 END) as total_credito
        FROM facturados f
        WHERE $where
    ";
    
    $stmtTotales = $pdo->prepare($sqlTotales);
    $stmtTotales->execute($params);
    $totales = $stmtTotales->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    // Si hay un error relacionado con only_full_group_by, intentar corregirlo
    if (strpos($e->getMessage(), 'ONLY_FULL_GROUP_BY') !== false) {
        $_SESSION['mensaje_error'] = "Error en la configuración SQL: " . $e->getMessage() . 
                                     ". Haga clic en 'Arreglar configuración SQL Mode' para solucionar.";
        $facturas = []; // Inicializar como array vacío para evitar errores
    } else {
        // Otros errores de base de datos
        $_SESSION['mensaje_error'] = "Error de base de datos: " . $e->getMessage();
        $facturas = [];
    }
}

// Mensajes
$mensajeExito = isset($_SESSION['mensaje_exito']) ? $_SESSION['mensaje_exito'] : '';
$mensajeError = isset($_SESSION['mensaje_error']) ? $_SESSION['mensaje_error'] : '';
unset($_SESSION['mensaje_exito'], $_SESSION['mensaje_error']);
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Historial de Facturación</title>
    <link rel="shortcut icon" href="<?php echo isset($config['favicon']) ? '../' . $config['favicon'] : '../img/favicon.png'; ?>" type="image/x-icon">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        .card {
            margin-bottom: 1.5rem;
            box-shadow: 0 .125rem .25rem rgba(0,0,0,.075)!important;
        }
        
        .card-header {
            background-color: <?php echo isset($config['color_principal']) ? $config['color_principal'] : '#007bff'; ?>;
            color: white;
            border-bottom: 0;
        }
        
        .table-dark th {
            background-color: #212529 !important;
            color: white !important;
        }
        
        .badge {
            font-size: 0.875rem;
            padding: 0.4em 0.8em;
        }
        
        .btn-primary {
            background-color: <?php echo isset($config['color_principal']) ? $config['color_principal'] : '#007bff'; ?>;
            border-color: <?php echo isset($config['color_principal']) ? $config['color_principal'] : '#007bff'; ?>;
        }
        
        .btn-primary:hover {
            filter: brightness(90%);
        }
    </style>
</head>
<body>
    <div class="container py-4">
        <h1 class="mb-4">Historial de Facturación</h1>
        
        <?php if (!empty($mensajeExito)): ?>
            <div class="alert alert-success alert-dismissible fade show" role="alert">
                <i class="fas fa-check-circle"></i> 
                <?php echo $mensajeExito; ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
            </div>
        <?php endif; ?>
        
        <?php if (!empty($mensajeError)): ?>
            <div class="alert alert-danger alert-dismissible fade show" role="alert">
                <i class="fas fa-times-circle"></i> 
                <?php echo $mensajeError; ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                <?php if (strpos($mensajeError, 'ONLY_FULL_GROUP_BY') !== false): ?>
                <div class="mt-2">
                    <a href="ajustar_sql_mode.php" class="btn btn-sm btn-outline-danger">
                        <i class="fas fa-tools"></i> Arreglar configuración SQL Mode
                    </a>
                </div>
                <?php endif; ?>
            </div>
        <?php endif; ?>
        
        <div class="card shadow mb-4">
            <div class="card-header">
                <h5 class="card-title mb-0">Filtros de búsqueda</h5>
            </div>
            <div class="card-body">
                <form method="get" action="" class="row g-3">
                    <div class="col-md-4">
                        <label for="buscar" class="form-label">Buscar</label>
                        <input type="text" class="form-control" id="buscar" name="buscar" 
                               value="<?php echo isset($_GET['buscar']) ? htmlspecialchars($_GET['buscar']) : ''; ?>"
                               placeholder="Cliente, RUC, Nº Factura, Producto...">
                    </div>
                    <div class="col-md-2">
                        <label for="desde" class="form-label">Desde</label>
                        <input type="date" class="form-control" id="desde" name="desde"
                               value="<?php echo isset($_GET['desde']) ? htmlspecialchars($_GET['desde']) : ''; ?>">
                    </div>
                    <div class="col-md-2">
                        <label for="hasta" class="form-label">Hasta</label>
                        <input type="date" class="form-control" id="hasta" name="hasta"
                               value="<?php echo isset($_GET['hasta']) ? htmlspecialchars($_GET['hasta']) : ''; ?>">
                    </div>
                    <div class="col-md-2">
                        <label for="condicion" class="form-label">Condición</label>
                        <select class="form-select" id="condicion" name="condicion">
                            <option value="">Todos</option>
                            <option value="contado" <?php echo isset($_GET['condicion']) && $_GET['condicion'] === 'contado' ? 'selected' : ''; ?>>Contado</option>
                            <option value="credito" <?php echo isset($_GET['condicion']) && $_GET['condicion'] === 'credito' ? 'selected' : ''; ?>>Crédito</option>
                        </select>
                    </div>
                    <!-- Campo oculto para estado, siempre envía 'todo' -->
                    <input type="hidden" name="estado" value="">
                    <div class="col-12">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-search"></i> Filtrar
                        </button>
                        <a href="historial_facturas.php" class="btn btn-secondary">
                            <i class="fas fa-broom"></i> Limpiar filtros
                        </a>
                    </div>
                </form>
            </div>
        </div>
        
        <div class="card shadow">
            <div class="card-header d-flex justify-content-between align-items-center">
                <h5 class="card-title mb-0">Facturas Emitidas</h5>
                <div>
                    <?php 
                    // Construir la URL para el reporte PDF manteniendo los filtros
                    $urlReporte = 'generar_reporte_facturas.php?';
                    if (isset($_GET['buscar'])) $urlReporte .= 'buscar=' . urlencode($_GET['buscar']) . '&';
                    if (isset($_GET['desde'])) $urlReporte .= 'desde=' . urlencode($_GET['desde']) . '&';
                    if (isset($_GET['hasta'])) $urlReporte .= 'hasta=' . urlencode($_GET['hasta']) . '&';
                    if (isset($_GET['condicion'])) $urlReporte .= 'condicion=' . urlencode($_GET['condicion']) . '&';
                    if (isset($_GET['estado'])) $urlReporte .= 'estado=' . urlencode($_GET['estado']) . '&';
                    $urlReporte = rtrim($urlReporte, '&');
                    ?>
                    <a href="<?php echo $urlReporte; ?>" class="btn btn-sm btn-danger me-2 text-white" target="_blank" title="Generar reporte">
                        <i class="fas fa-file-pdf"></i> Generar Reporte
                    </a>
                    <a href="facturar.php" class="btn btn-sm btn-light">
                        <i class="fas fa-file-invoice"></i> Nueva Factura
                    </a>
                </div>
            </div>
            <div class="card-body">
                <?php if (empty($facturas)): ?>
                    <div class="alert alert-info">
                        <i class="fas fa-info-circle"></i> No se encontraron facturas con los criterios de búsqueda actuales.
                    </div>
                <?php else: ?>
                    <div class="table-responsive">
                        <table class="table table-bordered table-hover">
                            <thead class="table-dark">
                                <tr>
                                    <th>Nº Factura</th>
                                    <th>Cliente</th>
                                    <th>RUC</th>
                                    <th>Fecha</th>
                                    <th>Condición</th>
                                    <th>Monto Total</th>
                                    <th>Estado</th>
                                    <th>Acciones</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach ($facturas as $factura): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($factura['factura_numero']); ?></td>
                                    <td><?php echo htmlspecialchars($factura['cliente_nombre']); ?></td>
                                    <td><?php echo htmlspecialchars($factura['cliente_ruc']); ?></td>
                                    <td><?php echo htmlspecialchars($factura['fecha']); ?></td>
                                    <td>
                                        <?php if ($factura['condicion'] === 'contado'): ?>
                                            <span class="badge bg-success">Contado</span>
                                        <?php else: ?>
                                            <span class="badge bg-info">Crédito <?php echo !empty($factura['dias_credito']) ? '(' . $factura['dias_credito'] . ' días)' : ''; ?></span>
                                        <?php endif; ?>
                                    </td>
                                    <td><?php echo number_format($factura['monto_total'], 2, ',', '.'); ?></td>
                                    <td>
                                        <?php if ($factura['estado'] === 'activo'): ?>
                                            <span class="badge bg-success">Activo</span>
                                        <?php else: ?>
                                            <span class="badge bg-danger">Cancelado</span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <div class="btn-group btn-group-sm">
                                            <a href="ver_factura.php?factura=<?php echo urlencode($factura['factura_numero']); ?>" 
                                               class="btn btn-primary" title="Ver detalles">
                                                <i class="fas fa-eye"></i>
                                            </a>
                                        </div>
                                    </td>
                                </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                    
                    <?php if ($totalPaginas > 1): ?>
                    <nav aria-label="Paginación">
                        <ul class="pagination justify-content-center">
                            <?php if ($page > 1): ?>
                            <li class="page-item">
                                <a class="page-link" href="?page=<?php echo $page - 1; ?><?php echo isset($_GET['buscar']) ? '&buscar=' . urlencode($_GET['buscar']) : ''; ?><?php echo isset($_GET['desde']) ? '&desde=' . urlencode($_GET['desde']) : ''; ?><?php echo isset($_GET['hasta']) ? '&hasta=' . urlencode($_GET['hasta']) : ''; ?><?php echo isset($_GET['condicion']) ? '&condicion=' . urlencode($_GET['condicion']) : ''; ?><?php echo isset($_GET['estado']) ? '&estado=' . urlencode($_GET['estado']) : ''; ?>">
                                    <i class="fas fa-chevron-left"></i> Anterior
                                </a>
                            </li>
                            <?php endif; ?>
                            
                            <?php
                            $startPage = max(1, $page - 2);
                            $endPage = min($totalPaginas, $page + 2);
                            
                            for ($i = $startPage; $i <= $endPage; $i++):
                            ?>
                            <li class="page-item <?php echo $i === $page ? 'active' : ''; ?>">
                                <a class="page-link" href="?page=<?php echo $i; ?><?php echo isset($_GET['buscar']) ? '&buscar=' . urlencode($_GET['buscar']) : ''; ?><?php echo isset($_GET['desde']) ? '&desde=' . urlencode($_GET['desde']) : ''; ?><?php echo isset($_GET['hasta']) ? '&hasta=' . urlencode($_GET['hasta']) : ''; ?><?php echo isset($_GET['condicion']) ? '&condicion=' . urlencode($_GET['condicion']) : ''; ?><?php echo isset($_GET['estado']) ? '&estado=' . urlencode($_GET['estado']) : ''; ?>">
                                    <?php echo $i; ?>
                                </a>
                            </li>
                            <?php endfor; ?>
                            
                            <?php if ($page < $totalPaginas): ?>
                            <li class="page-item">
                                <a class="page-link" href="?page=<?php echo $page + 1; ?><?php echo isset($_GET['buscar']) ? '&buscar=' . urlencode($_GET['buscar']) : ''; ?><?php echo isset($_GET['desde']) ? '&desde=' . urlencode($_GET['desde']) : ''; ?><?php echo isset($_GET['hasta']) ? '&hasta=' . urlencode($_GET['hasta']) : ''; ?><?php echo isset($_GET['condicion']) ? '&condicion=' . urlencode($_GET['condicion']) : ''; ?><?php echo isset($_GET['estado']) ? '&estado=' . urlencode($_GET['estado']) : ''; ?>">
                                    Siguiente <i class="fas fa-chevron-right"></i>
                                </a>
                            </li>
                            <?php endif; ?>
                        </ul>
                    </nav>
                    <?php endif; ?>
                    
                    <!-- Sección de Resumen de Totales -->
                    <?php if (!empty($totales)): ?>
                    <div class="card mt-4">
                        <div class="card-header bg-secondary text-white">
                            <h5 class="card-title mb-0">Resumen de Totales</h5>
                        </div>
                        <div class="card-body">
                            <div class="row">
                                <div class="col-md-3">
                                    <div class="card bg-light h-100">
                                        <div class="card-body text-center">
                                            <h5 class="card-title">Total Facturas</h5>
                                            <p class="card-text fs-4"><?php echo number_format($totales['total_facturas'], 0, ',', '.'); ?></p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-3">
                                    <div class="card bg-light h-100">
                                        <div class="card-body text-center">
                                            <h5 class="card-title">Monto Total</h5>
                                            <p class="card-text fs-4"><?php echo number_format($totales['monto_total'], 0, ',', '.'); ?> Gs.</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-3">
                                    <div class="card bg-light h-100">
                                        <div class="card-body text-center">
                                            <h5 class="card-title">Total Contado</h5>
                                            <p class="card-text fs-4"><?php echo number_format($totales['total_contado'], 0, ',', '.'); ?> Gs.</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-3">
                                    <div class="card bg-light h-100">
                                        <div class="card-body text-center">
                                            <h5 class="card-title">Total Crédito</h5>
                                            <p class="card-text fs-4"><?php echo number_format($totales['total_credito'], 0, ',', '.'); ?> Gs.</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <?php endif; ?>
                <?php endif; ?>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
