<?php
include('../adm/config/db.php');
include(__DIR__ . '/components/product_card.php');

$catId     = isset($_GET['categoria_id']) ? (int)$_GET['categoria_id'] : 0;
$offset    = isset($_GET['offset'])       ? (int)$_GET['offset']       : 0;
$limit     = isset($_GET['limit'])        ? (int)$_GET['limit']        : 30;
$isPromo   = isset($_GET['promo'])   && $_GET['promo']   == 1;
$isAtacado = isset($_GET['atacado']) && $_GET['atacado'] == 1;

// Verifica existência da coluna posicao UMA VEZ via INFORMATION_SCHEMA
// (mais eficiente que SHOW COLUMNS + evita 2 queries separadas)
$_colCheck = $conn->query(
    "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE()
       AND COLUMN_NAME = 'posicao'
       AND TABLE_NAME IN ('produtos', 'categorias')"
);
$_colTables    = [];
if ($_colCheck) {
    while ($_r = $_colCheck->fetch_assoc()) { $_colTables[] = $_r['TABLE_NAME']; }
}
$hasPosicaoProd = in_array('produtos',   $_colTables);
$hasPosicaoCat  = in_array('categorias', $_colTables);
unset($_colCheck, $_colTables, $_r);

$orderBy = $hasPosicaoProd ? "p.posicao ASC, p.id ASC" : "p.id DESC";

if ($isPromo) {
    // Busca produtos em promoção
    $sql = "SELECT p.id, p.nome, p.preco, p.preco_promocional, p.preco_atacado, p.imagem_principal, 
                   p.status, p.status_promocao, p.estoque, p.vender_sem_estoque, p.regra_atacado, p.atacado_min_qtd, p.atacado_min_valor, p.grade_composicao
            FROM produtos p
            WHERE p.status_promocao = 'ativo' AND p.status = 'Ativo' AND p.preco_promocional > 0
            ORDER BY p.id DESC
            LIMIT ? OFFSET ?";

    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ii", $limit, $offset);
} elseif ($isAtacado) {
    // Busca produtos em atacado
    $sql = "SELECT p.id, p.nome, p.preco, p.preco_promocional, p.preco_atacado, p.imagem_principal, 
                   p.status, p.status_promocao, p.estoque, p.vender_sem_estoque, p.regra_atacado, p.atacado_min_qtd, p.atacado_min_valor, p.grade_composicao
            FROM produtos p
            WHERE p.status = 'Ativo' AND p.preco_atacado > 0
            ORDER BY p.id DESC
            LIMIT ? OFFSET ?";

    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ii", $limit, $offset);
} else {
    // p.* já inclui posicao quando a coluna existe — sem necessidade de concatenar
    
    if ($catId > 0) {
        $sql = "SELECT p.*
                FROM produtos p
                WHERE p.categoria_id = ? AND p.status = 'Ativo'
                ORDER BY $orderBy
                LIMIT ? OFFSET ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("iii", $catId, $limit, $offset);
    } else {
        // Busca todos os produtos
        $sql = "SELECT p.*
                FROM produtos p
                WHERE p.status = 'Ativo'
                ORDER BY $orderBy
                LIMIT ? OFFSET ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ii", $limit, $offset);
    }
}

$stmt->execute();
$result = $stmt->get_result();

$html = "";
if ($result && $result->num_rows > 0) {
    $index = 0;
    while ($row = $result->fetch_assoc()) {
        $html .= renderProductCard($row, false, $index);
        $index++;
    }
}

echo $html;
?>
