<?php
/**
 * TechShop Perú - API Filtros Dinámicos de Productos AJAX
 */
define('SECURE_ACCESS', true);
header('Content-Type: application/json; charset=utf-8');

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

try {
    $db = db();

    $pagina = max(1, (int)($_GET['pagina'] ?? 1));
    $por_pagina = 12;
    $offset = ($pagina - 1) * $por_pagina;

    $where = ['p.activo = 1'];
    $params = [];

    if (!empty($_GET['buscar'])) {
        $buscar = '%' . sanitize($_GET['buscar']) . '%';
        $where[] = '(p.nombre LIKE ? OR p.descripcion_corta LIKE ?)';
        $params[] = $buscar;
        $params[] = $buscar;
    }
    $cat_slug = sanitize($_GET['categoria'] ?? '');
    if (!empty($cat_slug)) {
        $where[] = 'c.slug = ?';
        $params[] = $cat_slug;
    }
    if (!empty($_GET['marca'])) {
        $where[] = 'm.slug = ?';
        $params[] = sanitize($_GET['marca']);
    }
    if (!empty($_GET['min'])) {
        $where[] = 'COALESCE(p.precio_oferta, p.precio) >= ?';
        $params[] = (float)$_GET['min'];
    }
    if (!empty($_GET['max'])) {
        $where[] = 'COALESCE(p.precio_oferta, p.precio) <= ?';
        $params[] = (float)$_GET['max'];
    }
    if (!empty($_GET['en_oferta'])) {
        $where[] = 'p.en_oferta = 1';
    }

    $orden = $_GET['orden'] ?? 'destacado';
    $order_clause = match($orden) {
        'precio_asc' => 'COALESCE(p.precio_oferta, p.precio) ASC',
        'precio_desc' => 'COALESCE(p.precio_oferta, p.precio) DESC',
        'nombre' => 'p.nombre ASC',
        'nuevos' => 'p.fecha_creacion DESC',
        'rating' => 'p.calificacion DESC',
        default => 'p.destacado DESC, p.fecha_creacion DESC'
    };

    $where_sql = implode(' AND ', $where);
    $sql_base = "FROM productos p JOIN categorias c ON p.categoria_id = c.id JOIN marcas m ON p.marca_id = m.id WHERE {$where_sql}";

    $stmt = $db->prepare("SELECT COUNT(*) {$sql_base}");
    $stmt->execute($params);
    $total = (int)$stmt->fetchColumn();
    $total_paginas = ceil($total / $por_pagina);

    $stmt = $db->prepare("SELECT p.*, c.nombre AS categoria_nombre, c.slug AS categoria_slug, m.nombre AS marca_nombre, m.slug AS marca_slug {$sql_base} ORDER BY {$order_clause} LIMIT {$por_pagina} OFFSET {$offset}");
    $stmt->execute($params);
    $productos = $stmt->fetchAll();

    ob_start();
    if (empty($productos)) {
        echo '<div class="empty-state text-center py-5 w-100"><i class="bi bi-search display-4 text-muted"></i><h5 class="mt-2">Sin resultados</h5><p class="text-muted">Intenta con otros filtros o términos de búsqueda.</p></div>';
    } else {
        echo '<div class="row g-3">';
        foreach ($productos as $p) {
            echo '<div class="col-6 col-md-4 col-lg-4">';
            include __DIR__ . '/../includes/product-card.php';
            echo '</div>';
        }
        echo '</div>';
    }
    $html_productos = ob_get_clean();

    echo json_encode([
        'success' => true,
        'total' => $total,
        'total_paginas' => $total_paginas,
        'pagina_actual' => $pagina,
        'html' => $html_productos
    ]);

} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => 'Error al filtrar productos']);
}
