<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// โหลดไฟล์ Config และ Database
if (file_exists(__DIR__ . '/../config/config.php')) {
    require_once __DIR__ . '/../config/config.php';
} elseif (file_exists(__DIR__ . '/../config.php')) {
    require_once __DIR__ . '/../config.php';
}

if (file_exists(__DIR__ . '/../config/database.php')) {
    require_once __DIR__ . '/../config/database.php';
} elseif (file_exists(__DIR__ . '/../database.php')) {
    require_once __DIR__ . '/../database.php';
}

if (file_exists(__DIR__ . '/../includes/auth.php')) {
    require_once __DIR__ . '/../includes/auth.php';
}

$db = getDBConnection();

// Auto seed products if database has zero products
$checkStmt = $db->query("SELECT COUNT(*) FROM products");
if ($checkStmt->fetchColumn() == 0) {
    $db->exec("INSERT INTO products (id, category_id, name, slug, description, price, normal_price, main_image, is_featured, is_new, status) VALUES
    (1, 1, 'เสื้อยืด BLACK', 'black-oversize-tshirt', 'เสื้อยืดสีดำ ทรง Oversize สไตล์มินิมัล ผ้าคอตตอน 100% นุ่มสบาย ระบายอากาศดีเยี่ยม ใส่ได้ทุกวัน มีไซส์ S ถึง 4XL และ Oversize', 390.00, 490.00, '/uploads/black_tshirt_main.jpg', 1, 1, 'active')");

    $db->exec("INSERT INTO product_variants (product_id, size, color, stock) VALUES
    (1, 'S', 'Black', 30),
    (1, 'M', 'Black', 50),
    (1, 'L', 'Black', 50),
    (1, 'XL', 'Black', 40),
    (1, '2XL', 'Black', 30),
    (1, '3XL', 'Black', 20),
    (1, '4XL', 'Black', 10),
    (1, 'Oversize', 'Black', 25)");

    $db->exec("INSERT INTO product_images (product_id, image_path, thumb_path, sort_order) VALUES
    (1, '/uploads/black_tshirt_main.jpg', '/uploads/black_tshirt_main.jpg', 1),
    (1, '/uploads/black_tshirt_back.jpg', '/uploads/black_tshirt_back.jpg', 2),
    (1, '/uploads/size_chart.jpg', '/uploads/size_chart.jpg', 3)");
}

// Filtering & Search Parameters
$category_id = isset($_GET['category']) ? (int)$_GET['category'] : 0;
$search = isset($_GET['search']) ? sanitize($_GET['search']) : '';
$sort = isset($_GET['sort']) ? sanitize($_GET['sort']) : 'latest';
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$min_price = isset($_GET['min_price']) && is_numeric($_GET['min_price']) ? (float)$_GET['min_price'] : 0;
$max_price = isset($_GET['max_price']) && is_numeric($_GET['max_price']) ? (float)$_GET['max_price'] : 0;
$selected_sizes = isset($_GET['sizes']) && is_array($_GET['sizes']) ? $_GET['sizes'] : [];
$selected_brands = isset($_GET['brands']) && is_array($_GET['brands']) ? array_map('intval', $_GET['brands']) : [];

$limit = 12;
$offset = ($page - 1) * $limit;

// Fetch Filter Settings from Database
$filterSettings = [
    'category' => ['is_enabled' => 1, 'selected_items' => []],
    'price'    => ['is_enabled' => 1, 'selected_items' => []],
    'brand'    => ['is_enabled' => 1, 'selected_items' => []],
    'size'     => ['is_enabled' => 1, 'selected_items' => []],
];

try {
    $fsRows = $db->query("SELECT * FROM `filter_settings`")->fetchAll(PDO::FETCH_ASSOC);
    foreach ($fsRows as $fs) {
        $filterSettings[$fs['filter_key']] = [
            'is_enabled' => (int)$fs['is_enabled'],
            'selected_items' => json_decode($fs['selected_items'] ?? '[]', true) ?: []
        ];
    }
} catch (Exception $e) {
    // Fallback if table doesn't exist yet
}

// Fetch filter options (Brands)
try {
    if (!empty($filterSettings['brand']['selected_items'])) {
        $brandIn = implode(',', array_map('intval', $filterSettings['brand']['selected_items']));
        $filter_brands = $db->query("SELECT id, name as store_name FROM brands WHERE id IN ($brandIn) AND is_active = 1 ORDER BY name ASC")->fetchAll();
    } else {
        $filter_brands = $db->query("SELECT id, name as store_name FROM brands WHERE is_active = 1 ORDER BY name ASC")->fetchAll();
    }
} catch (Exception $e) {
    $filter_brands = $db->query("SELECT id, store_name FROM vendors WHERE status = 'approved' ORDER BY store_name ASC")->fetchAll();
}

// Fetch filter options (Sizes)
try {
    $filter_sizes = $db->query("SELECT name as size FROM sizes WHERE is_active = 1 ORDER BY sort_order ASC, id ASC")->fetchAll();
} catch (Exception $e) {
    $filter_sizes = $db->query("SELECT DISTINCT size FROM product_variants WHERE stock > 0 ORDER BY size ASC")->fetchAll();
}

// Build query
$where = ["p.status = 'active'"];
$params = [];

if ($category_id > 0) {
    $where[] = "p.category_id = ?";
    $params[] = $category_id;
}
if (!empty($search)) {
    $where[] = "(p.name LIKE ? OR p.description LIKE ?)";
    $params[] = "%$search%";
    $params[] = "%$search%";
}
if ($min_price > 0) {
    $where[] = "p.price >= ?";
    $params[] = $min_price;
}
if ($max_price > 0 && $max_price >= $min_price) {
    $where[] = "p.price <= ?";
    $params[] = $max_price;
}
if (!empty($selected_brands)) {
    $placeholders = str_repeat('?,', count($selected_brands) - 1) . '?';
    $where[] = "p.vendor_id IN ($placeholders)";
    $params = array_merge($params, $selected_brands);
}
    if (!empty($selected_sizes)) {
        $sizeConditions = [];
        foreach ($selected_sizes as $sz) {
            $sizeConditions[] = "FIND_IN_SET(?, REPLACE(IFNULL(p.sizes, ''), ' ', '')) > 0";
            $params[] = trim($sz);
        }
        $where[] = "(" . implode(" OR ", $sizeConditions) . ")";
    }

$whereClause = implode(" AND ", $where);

// Sorting logic
$orderBy = "p.created_at DESC";
if ($sort === 'price_asc') $orderBy = "p.price ASC";
if ($sort === 'price_desc') $orderBy = "p.price DESC";

// Count total
$countStmt = $db->prepare("SELECT COUNT(DISTINCT p.id) FROM products p LEFT JOIN vendors v ON p.vendor_id = v.id WHERE $whereClause");
$countStmt->execute($params);
$totalProducts = $countStmt->fetchColumn();
$totalPages = ceil($totalProducts / $limit);

// Fetch catalog
$query = "SELECT p.*, v.store_name, v.store_slug 
          FROM products p 
          LEFT JOIN vendors v ON p.vendor_id = v.id 
          WHERE $whereClause 
          ORDER BY $orderBy 
          LIMIT $limit OFFSET $offset";
$stmt = $db->prepare($query);
$stmt->execute($params);
$products = $stmt->fetchAll();

// Fetch categories (filtered by admin settings if selected)
if (!empty($filterSettings['category']['selected_items'])) {
    $catIn = implode(',', array_map('intval', $filterSettings['category']['selected_items']));
    $categories = $db->query("SELECT * FROM categories WHERE id IN ($catIn) ORDER BY id ASC")->fetchAll();
} else {
    $categories = $db->query("SELECT * FROM categories ORDER BY id ASC")->fetchAll();
}

$pageTitle = "หน้าหลัก - ร้านเสื้อผ้าออนไลน์";
require_once __DIR__ . '/../includes/header.php';
?>

<!-- ═══════════════════════════════════════ -->
<!--   HERO BANNER                           -->
<!-- ═══════════════════════════════════════ -->
<section class="hero-section mb-4" id="heroSection">
  <div class="hero-banner-bg">
    <img src="<?php echo SITE_URL; ?>/assets/images/image_6.webp?v=<?php echo time(); ?>"
         alt="41SHOP Banner"
         class="hero-banner-img w-full object-cover rounded-lg"
         onerror="this.onerror=null; this.src='<?php echo SITE_URL; ?>/assets/images/no-image.png';">
  </div>
</section>

<?php
// Find category name if category is selected
$category_name = "สินค้าทั้งหมด";
if ($category_id > 0) {
    foreach ($categories as $cat) {
        if ($cat['id'] == $category_id) {
            $category_name = $cat['name'];
            break;
        }
    }
}
?>
<!-- Breadcrumb Navigation -->
<nav aria-label="breadcrumb" class="mb-4">
  <ol class="breadcrumb bg-light p-3 rounded-3 shadow-sm">
    <li class="breadcrumb-item"><a href="index.php" class="text-decoration-none">หน้าหลัก</a></li>
    <?php if ($category_id > 0): ?>
      <li class="breadcrumb-item active" aria-current="page"><?php echo sanitize($category_name); ?></li>
    <?php endif; ?>
  </ol>
</nav>

<!-- ═══════════════════════════════════════ -->
<!--   MAIN CONTENT WITH SIDEBAR FILTER      -->
<!-- ═══════════════════════════════════════ -->
<div class="row g-4 mb-5">
  
  <!-- Sidebar Filters -->
  <div class="col-lg-3">
    <form id="filterForm" class="card shadow-sm border-0 p-4 sticky-top" style="top: 80px; z-index: 1;" onsubmit="event.preventDefault(); fetchFilteredProducts();">
      <h5 class="fw-bold mb-4">⚙️ ตัวกรองสินค้า</h5>
      
      <input type="hidden" name="page" id="pageInput" value="1">
      <input type="hidden" name="search" value="<?php echo sanitize($search); ?>">

      <!-- Category Filter -->
      <?php if (!empty($filterSettings['category']['is_enabled'])): ?>
      <div class="mb-4">
        <h6 class="fw-bold mb-3">🏷️ หมวดหมู่</h6>
        <select name="category" class="form-select form-select-sm rounded-pill filter-input">
          <option value="0">ทั้งหมด 👕</option>
          <?php foreach ($categories as $cat): ?>
            <option value="<?php echo $cat['id']; ?>" <?php echo $category_id === $cat['id'] ? 'selected' : ''; ?>>
              <?php echo $cat['icon'] . ' ' . sanitize($cat['name']); ?>
            </option>
          <?php endforeach; ?>
        </select>
      </div>
      <?php endif; ?>

      <!-- Price Filter -->
      <?php if (!empty($filterSettings['price']['is_enabled'])): ?>
      <div class="mb-4">
        <h6 class="fw-bold mb-3">💰 ช่วงราคา</h6>
        <div class="d-flex align-items-center gap-2">
          <input type="number" name="min_price" class="form-control form-control-sm filter-input" placeholder="ต่ำสุด" value="<?php echo $min_price > 0 ? $min_price : ''; ?>" min="0">
          <span>-</span>
          <input type="number" name="max_price" class="form-control form-control-sm filter-input" placeholder="สูงสุด" value="<?php echo $max_price > 0 ? $max_price : ''; ?>" min="0">
        </div>
      </div>
      <?php endif; ?>

      <!-- Brand Filter -->
      <?php if (!empty($filterSettings['brand']['is_enabled'])): ?>
      <div class="mb-4">
        <h6 class="fw-bold mb-3">🏪 แบรนด์ / ร้านค้า</h6>
        <input type="text" class="form-control form-control-sm mb-2" id="brandSearch" placeholder="ค้นหาแบรนด์...">
        <div class="filter-scroll" id="brandList" style="max-height: 150px; overflow-y: auto;">
          <?php foreach ($filter_brands as $brand): ?>
            <div class="form-check mb-2 brand-item">
              <input class="form-check-input filter-input" type="checkbox" name="brands[]" value="<?php echo $brand['id']; ?>" id="brand_<?php echo $brand['id']; ?>" <?php echo in_array($brand['id'], $selected_brands) ? 'checked' : ''; ?>>
              <label class="form-check-label small brand-label" for="brand_<?php echo $brand['id']; ?>">
                <?php echo sanitize($brand['store_name']); ?>
              </label>
            </div>
          <?php endforeach; ?>
        </div>
      </div>
      <?php endif; ?>

      <!-- Size Filter -->
      <?php if (!empty($filterSettings['size']['is_enabled'])): ?>
      <div class="mb-4">
        <h6 class="fw-bold mb-3">📏 ขนาด (Size)</h6>
        <div class="d-flex flex-wrap gap-2">
          <?php foreach ($filter_sizes as $sz): ?>
            <div class="form-check p-0 m-0">
              <input class="btn-check filter-input" type="checkbox" name="sizes[]" value="<?php echo sanitize($sz['size']); ?>" id="size_<?php echo sanitize($sz['size']); ?>" <?php echo in_array($sz['size'], $selected_sizes) ? 'checked' : ''; ?>>
              <label class="btn btn-outline-secondary btn-sm" for="size_<?php echo sanitize($sz['size']); ?>">
                <?php echo sanitize($sz['size']); ?>
              </label>
            </div>
          <?php endforeach; ?>
        </div>
      </div>
      <?php endif; ?>

      <button type="button" class="btn btn-light w-100 rounded-pill mt-2" onclick="resetFilters()">ล้างตัวกรองทั้งหมด</button>
    </form>
  </div>

  <!-- Product Grid -->
  <div class="col-lg-9" id="productGridContainer">
    <!-- AJAX Content will be loaded here -->
    <div class="text-center py-5">
      <div class="spinner-border text-primary" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
    </div>
  </div> <!-- End col-lg-9 -->
</div> <!-- End row -->

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Initial Load
    fetchFilteredProducts();

    // Auto-fetch on input change
    document.querySelectorAll('.filter-input').forEach(input => {
        input.addEventListener('change', () => {
            document.getElementById('pageInput').value = 1; // reset page
            fetchFilteredProducts();
        });
    });

    // Quick Brand Search
    const brandSearch = document.getElementById('brandSearch');
    if (brandSearch) {
        brandSearch.addEventListener('input', function(e) {
            const term = e.target.value.toLowerCase();
            document.querySelectorAll('.brand-item').forEach(item => {
                const label = item.querySelector('.brand-label').textContent.toLowerCase();
                item.style.display = label.includes(term) ? '' : 'none';
            });
        });
    }
});

function goToPage(page) {
    document.getElementById('pageInput').value = page;
    fetchFilteredProducts();
    document.getElementById('productGridContainer').scrollIntoView({behavior: 'smooth'});
}

function resetFilters() {
    document.getElementById('filterForm').reset();
    document.getElementById('pageInput').value = 1;
    // reset visual state of buttons
    document.querySelectorAll('.btn-check').forEach(btn => btn.checked = false);
    fetchFilteredProducts();
}

async function fetchFilteredProducts() {
    const container = document.getElementById('productGridContainer');
    container.style.opacity = '0.5';
    
    const form = document.getElementById('filterForm');
    const formData = new FormData(form);
    
    const sortSelect = document.querySelector('select[name="sort"]');
    if (sortSelect) {
        formData.append('sort', sortSelect.value);
    } else {
        formData.append('sort', 'latest');
    }

    const params = new URLSearchParams(formData);
    
    try {
        const response = await fetch(`ajax/filter_products.php?${params.toString()}`);
        if (!response.ok) {
            throw new Error(`ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ (HTTP ${response.status})`);
        }
        
        const data = await response.json();
        if (!data.success) {
            throw new Error(data.message || 'เกิดข้อผิดพลาดในการดึงข้อมูล');
        }

        renderProducts(data);
    } catch (err) {
        console.error('Fetch Error:', err);
        Swal.fire({
            icon: 'error',
            title: 'เกิดข้อผิดพลาด',
            text: err.message || 'ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้'
        });
    } finally {
        container.style.opacity = '1';
    }
}

function renderProducts(data) {
    const container = document.getElementById('productGridContainer');
    
    // Update Header
    let html = `
    <div class="d-flex justify-content-between align-items-center mb-4">
      <h4 class="mb-0 fw-bold">ผลการค้นหา <span class="text-muted fs-6">(${data.total} รายการ)</span></h4>
      <div class="d-flex gap-2 align-items-center">
        <label class="text-muted small text-nowrap mb-0">เรียงโดย:</label>
        <select name="sort" class="form-select form-select-sm rounded-pill w-auto" form="filterForm" onchange="fetchFilteredProducts()">
          <option value="latest" ${data.sort === 'latest' ? 'selected' : ''}>✨ ใหม่ล่าสุด</option>
          <option value="price_asc" ${data.sort === 'price_asc' ? 'selected' : ''}>💵 ราคาต่ำ - สูง</option>
          <option value="price_desc" ${data.sort === 'price_desc' ? 'selected' : ''}>💎 ราคาสูง - ต่ำ</option>
        </select>
      </div>
    </div>
    <div class="row row-cols-2 row-cols-md-3 row-cols-xl-4 g-3 g-md-4">`;

    if (data.products.length === 0) {
        html += `
        <div class="col-12 text-center py-5 w-100">
          <div class="fs-1">📦</div>
          <h4 class="text-muted mt-2">ไม่พบสินค้าที่คุณค้นหา</h4>
          <button type="button" class="btn btn-outline-primary rounded-pill mt-2" onclick="resetFilters()">ดูสินค้าทั้งหมด</button>
        </div>`;
    } else {
        const defaultNoImage = `${SITE_URL}/assets/images/no-image.png`;
        data.products.forEach(p => {
            let imageUrl = defaultNoImage;
            if (p.image_url && typeof p.image_url === 'string' && p.image_url.trim() !== '') {
                imageUrl = p.image_url;
            }
            const price = parseFloat(p.price).toLocaleString('en-US', {minimumFractionDigits: 2});
            const normalPrice = parseFloat(p.normal_price || p.price);
            const normalPriceStr = normalPrice.toLocaleString('en-US', {minimumFractionDigits: 2});
            const discountPct = normalPrice > p.price ? Math.round(((normalPrice - p.price) / normalPrice) * 100) : 0;
            
            let badgeHtml = '';
            if (p.brand_name) {
                badgeHtml = `<div class="mb-1"><span class="badge bg-secondary">${p.brand_name}</span></div>`;
            } else if (p.store_name) {
                badgeHtml = `<div class="mb-1"><a href="shop.php?slug=${p.store_slug}" class="store-badge">🏪 ${p.store_name}</a></div>`;
            }

            let priceHtml = `<span class="price-current">฿${price}</span>`;
            if (normalPrice > p.price) {
                priceHtml += `
                  <span class="price-strike">฿${normalPriceStr}</span>
                  <span class="discount-badge">-${discountPct}%</span>
                `;
            }

            html += `
            <div class="col d-flex align-items-stretch">
              <div class="card card-custom h-100 position-relative w-100">
                ${p.is_new ? '<span class="position-absolute top-0 start-0 m-2 badge badge-tag-new">✨ ใหม่</span>' : ''}
                
                <a href="product_detail.php?id=${p.id}" class="product-img-wrapper">
                  <img src="${imageUrl}" onerror="this.onerror=null; this.src='${SITE_URL}/assets/images/no-image.png';" class="product-card-img" alt="${p.name}" loading="lazy">
                </a>

                <div class="card-body d-flex flex-column justify-content-between p-3">
                  <div>
                    ${badgeHtml}
                    <h6 class="card-title fw-normal mb-1">
                      <a href="product_detail.php?id=${p.id}" class="product-title-link">${p.name}</a>
                    </h6>
                    <div class="d-flex align-items-baseline flex-wrap gap-1 mb-3">
                      ${priceHtml}
                    </div>
                  </div>
                  <button onclick="addToCart(${p.id})" class="btn btn-primary-custom w-100 rounded-pill py-2">
                    หยิบใส่ตะกร้า 🛒
                  </button>
                </div>
              </div>
            </div>`;
        });
    }
    
    html += `</div>`; // End row
    
    if (data.totalPages > 1) {
        html += `<nav class="mt-5 d-flex justify-content-center"><ul class="pagination">`;
        for (let i = 1; i <= data.totalPages; i++) {
            html += `<li class="page-item ${data.page === i ? 'active' : ''}">
                <button type="button" class="page-link" onclick="goToPage(${i})">${i}</button>
            </li>`;
        }
        html += `</ul></nav>`;
    }
    
    container.innerHTML = html;
}
</script>

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