<?php

namespace App;

use App\Models\Product;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Collection;

interface ProductRepositoryInterface
{
    public function find(int $id): ?Product;
    public function findBySlug(string $slug): ?Product;
    public function findActive(int $id): ?Product;
    public function findActiveBySlug(string $slug): ?Product;
    public function getActive(): Collection;
    public function getFeatured(int $limit = 8): Collection;
    public function getInStock(int $limit = null): Collection;
    public function getNewArrivals(int $limit = 8): Collection;
    public function getOnSale(int $limit = 8): Collection;
    public function getByCategory(int $categoryId, array $options = []): LengthAwarePaginator;
    public function search(string $query, array $filters = []): LengthAwarePaginator;
    public function getRelated(int $productId, int $categoryId, int $limit = 4): Collection;
    public function getRecent(int $excludeProductId, int $limit = 4): Collection;
    public function create(array $data): Product;
    public function update(Product $product, array $data): bool;
    public function delete(Product $product): bool;
}
