<?php  namespace App\Models;  use App\Traits\HasStorage; use App\Contracts\HasMedia; use Illuminate\Support\Str; use App\Traits\HasTranslations; use Illuminate\Support\Collection; use App\Observers\CategoryObserver; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use App\Contracts\HasTranslations as ContractsHasTranslations; use Staudenmeir\LaravelAdjacencyList\Eloquent\HasRecursiveRelationships;  class Category extends Model implements ContractsHasTranslations, HasMedia { 	use HasStorage, HasRecursiveRelationships, HasTranslations;  	protected $casts = [ 		'active' => 'boolean', 		'show_on_homepage' => 'boolean', 		'use_parent_filters' => 'boolean', 	];  	public function getParentKeyName(): string{}  	public function getDefaultMediaPrefix(): string{}  	public function mediaConfig(): array{}  	public function defaultTranslationLocale(): string{}  	public function categoryFilters(): HasMany{}  	public function products(): HasMany{}  	public function parent(): BelongsTo{}  	public function children(): HasMany{}  	public function scopeIncludes(object $query, ?string $lang = null): Builder{}  	public function scopeAvailable(Builder $query, ?bool $isHomepage = null): Builder{}  	public function scopeBaseCategories(Builder $query, ?bool $isHomepage = null): Builder{}  	public function scopeSearch(Builder $query, ?string $search = null): Builder{}  	public static function getCategoryByIdOrSlug(string $category, ?string $lang): self 	{ 		return static::includes($lang)->available()->where(function ($query) use ($category) { 			$query->where('id', $category) 				->orWhere('slug', $category) 				->orWhereHas('translations', function ($query) use ($category) { 					$query->where([ 						['column', 'slug'], 						['value', $category], 					]); 				}); 		})->firstOrFail(); 	}  	public function scopeParent(Builder $query, bool $parent_exists, ?string $parent_category = null): Builder{}  	public function isRecursive(?string $category_id): bool{}  	public function setNameAttribute(?string $value): void{}  	public function storeFilters(?array $selected_filters = []): self{}  	/** 	 * Returns only available Web filters (true parameter in includes). 	 */ 	public function getFilters(?string $lang = null): Collection{}  	/** 	 * used only internally when adding product filters (all filters will be shown). 	 */ 	public function getAllFilters(?string $lang = null): Collection{}  	public function setSlugAttribute(?string $value): void{}  	protected static function initObservers(): ?string 	{ 		return CategoryObserver::class; 	} }