<?php

namespace App\View\Components\Blocks;

use App\Models\Category;
use App\Models\Product;
use Illuminate\View\Component;

/**
 * Bloque "Cuadrícula de Productos".
 * Recibe los filtros definidos en el Page Builder (guardados en el JSON) y
 * construye dinámicamente la consulta:
 *   - category_id  : filtra por categoría (incluyendo subcategorías)
 *   - brand_id     : filtra por marca
 *   - only_on_sale : solo productos en oferta
 *   - only_month   : solo "producto del mes"
 *   - limit        : cantidad máxima a mostrar
 *   - columns      : columnas de la cuadrícula
 */
class ProductGrid extends Component
{
    public $products;

    public function __construct(
        public ?string $title = 'Productos',
        public ?int $category_id = null,
        public ?int $brand_id = null,
        public bool $only_on_sale = false,
        public bool $only_month = false,
        public int $limit = 8,
        public int $columns = 4,
    ) {
        $query = Product::query()->active()->with(['brand', 'category']);

        // Filtro por categoría INCLUYENDO subcategorías anidadas.
        if ($category_id) {
            $category = Category::find($category_id);
            $ids = $category ? $category->descendantIds() : [$category_id];
            $query->whereIn('category_id', $ids);
        }

        if ($brand_id) {
            $query->where('brand_id', $brand_id);
        }

        if ($only_on_sale) {
            $query->onSale();
        }

        if ($only_month) {
            $query->productOfMonth();
        }

        $this->products = $query->latest()->take($limit)->get();
    }

    public function render()
    {
        return view('components.blocks.product-grid');
    }
}
