<?php  namespace App\Models;  use App\Traits\HasMarkets; use App\Traits\HasStorage; use App\Contracts\HasMedia; use App\Traits\HasTranslations; use App\Observers\ProductObserver; use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Builder; use App\Services\ProductSpecs\ProductSpecs; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany;  class Product extends Model implements HasMedia { 	use HasStorage, HasMarkets, HasTranslations;  	public array $translatable = [ 		'name', 		'description', 	];  	protected $casts = [ 		'active' => 'boolean', 		'accessory' => 'boolean', 		'popular' => 'boolean', 		'featured' => 'boolean', 		'discontinued' => 'boolean', 		'stocked' => 'boolean', 	];  	protected int $quantity = 0; 	private ?Collection $filtered_shops = null; 	private ?Collection $compatible_products = null;  	public function setFilteredShops(Collection $shops): void{}  	public function getFilteredShops(): ?Collection{}  	public function specsCategoryItems(): HasMany{}  	public function scopeAddVariants(Builder $query): Builder{}  	public function getPossibleColorsFromVariants(): array{}  	public function getVariantsAttribute(?string $value): array{}  	public function values(): HasMany{}  	public function specsCategories(): BelongsToMany{}  	public function manufacturer(): BelongsTo{}  	public function scopeFilterManufacturer(Builder $query, ?string $manufacturer_slug): Builder{}  	public function isAccessory(): bool{}  	public function setCompatibleProducts(Collection $products): void{}  	public function getCompatibleProducts(): Collection{}  	public function faqs(): HasMany{}  	public function details(): HasOne{}  	public function shops(): BelongsToMany{}  	public function products(): BelongsToMany{}  	public function accessories(): BelongsToMany{}  	public function availableAccessories(): BelongsToMany{}  	public function includedAccessories(): BelongsToMany{}  	public function scopeProductAccessories(): Builder{}  	public function scopeAccessory(Builder $query): Builder{}  	public function scopeInStock(Builder $query): Builder{}  	public function scopeDiscontinued(Builder $query): Builder{}  	public function scopeNotDiscontinued(Builder $query): Builder{}  	public function getIncludes(): array{}  	public function getDefaultMediaPrefix(): string{}  	public function mediaConfig(): array{}  	public function specsByCategory(Product $product): array{}  	public function specsByCategoryAPI(?Product $product = null, string $language = 'en'): array{}  	public function productFilters(): HasMany{}  	public function category(): BelongsTo{}  	public function scopeAvailable(Builder $query): Builder{}  	public function scopeFeatured(Builder $query): Builder{}  	public function scopeNotAccessory(Builder $query): Builder{}  	public function scopePopular(Builder $query): Builder{}  	public function scopeFilterSortBy(Builder $query, ?string $sort_by = null, ?string $fieldName = null): Builder{}  	public function scopeFilterCategory(Builder $query, ?string $category_slug = null, string $lang = 'en'): Builder{}  	public function scopeFilterColor(Builder $query, ?string $color): Builder{}  	public function scopeDynamicFilters(Builder $query, ?array $filters = null, string $lang = 'en'): Builder{}  	public function scopeSearch(Builder $query, ?string $search = null, string $lang = 'en'): Builder{}  	public function getRouteKeyName(){}  	public function resolveRouteBinding($value, $field = null): Product{}  	public function orders(): BelongsToMany{}  	public function getQuantity(): int{}  	public function setQuantity(int $quantity): void{}  	public function scopePriceRange(Builder $query, ?int $price_min = null, ?int $price_max = null): Builder{}  	public function scopeFilterCategories(Builder $query, array $categories, string $lang): Builder{}  	public function getDisplayPDVRate(): ?float{}  	public function scopeFullSearch(Builder $query, ?string $search = null): Builder{}  	public function wishlisted(): BelongsToMany{}  	protected static function initObservers(): string 	{ 		return ProductObserver::class; 	}  	protected static function boot(): void 	{ 		parent::boot();  		static::addGlobalScope('currentMarket', function (object $builder) { 			$builder->onCurrentMarket(); 		}); 	} }