<?php
// GET /api/products/list.php — Public product listing (no auth required)
require_once __DIR__ . '/../../api/init.php';

if ($_SERVER['REQUEST_METHOD'] !== 'GET') Response::error('Method not allowed.', 405);

$db     = DB::conn();
$cat    = trim($_GET['cat'] ?? $_GET['category'] ?? '');
$q      = trim($_GET['q']        ?? '');
$sort   = $_GET['sort']   ?? 'newest';
$page   = max(1, (int)($_GET['page']  ?? 1));
$limit  = min(40, max(1, (int)($_GET['limit'] ?? 20)));
$offset = ($page - 1) * $limit;

// Build WHERE
$where  = ['p.is_active = 1'];
$params = [];

if ($cat)  { $where[] = 'p.category = ?';       $params[] = $cat; }
if ($q)    { $where[] = 'p.name LIKE ?';         $params[] = "%$q%"; }

$whereSQL = 'WHERE ' . implode(' AND ', $where);

// Order
switch ($sort) {
    case 'price_asc':  $orderSQL = 'p.price ASC';        break;
    case 'price_desc': $orderSQL = 'p.price DESC';       break;
    case 'popular':    $orderSQL = 'p.sold_count DESC';  break;
    case 'rating':     $orderSQL = 'p.sold_count DESC';  break;
    default:           $orderSQL = 'p.created_at DESC';  break;
}

// Fetch
$stmt = $db->prepare("
    SELECT p.id, p.name, p.price, p.category, p.image_url, p.sold_count, p.stock,
           u.username AS seller_name,
           sp.shop_name
    FROM products p
    JOIN users u ON u.id = p.seller_id
    LEFT JOIN seller_profiles sp ON sp.user_id = p.seller_id
    $whereSQL
    ORDER BY $orderSQL
    LIMIT $limit OFFSET $offset
");
$stmt->execute($params);
$products = $stmt->fetchAll();

// Count
$stmtCount = $db->prepare("SELECT COUNT(*) as cnt FROM products p $whereSQL");
$stmtCount->execute($params);
$total = (int)$stmtCount->fetch()['cnt'];

foreach ($products as &$p) {
    $p['id']         = (int)$p['id'];
    $p['price']      = (float)$p['price'];
    $p['sold_count'] = (int)$p['sold_count'];
    $p['stock']      = (int)$p['stock'];
}

// Categories list
$cats = $db->query("SELECT DISTINCT category FROM products WHERE is_active=1 AND category IS NOT NULL AND category != '' ORDER BY category")->fetchAll(PDO::FETCH_COLUMN);

Response::success('Products fetched.', [
    'products'   => $products,
    'total'      => $total,
    'page'       => $page,
    'pages'      => ceil($total / $limit),
    'categories' => $cats,
]);
