<?php

namespace App\Models\Shop;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;

class Categorizable extends Model
{
    protected $table = 'categorizables';

    public function categorizable(): MorphTo
    {
        return $this->morphTo();
    }

    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }

    public function article(): BelongsTo
    {
        return $this->belongsTo(Article::class, 'categorizable_id');
    }

    public function scopeByCategory($query, $category_id)
    {
        return $query->where($this->table.'.category_id', $category_id);
    }

    public function scopeByCategories($query, $categories_id)
    {
        return $query->whereIn($this->table.'.category_id', $categories_id);
    }

    public function scopeByCategoryParent($query, $category_id)
    {
        $category = Category::find($category_id);

        return $query->whereHas('category', function ($query) use ($category) {
            return $query->inRange($category->_lft, $category->_rgt);
        });
    }
}
