<?php

namespace Yajny\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;
use Yajny\Traits\SelectTranslations;
use Spatie\Searchable\Searchable;
use Spatie\Searchable\SearchResult;
use Yajny\Traits\HasSitemap;

class Category extends Model implements Searchable
{
    use HasTranslations,SelectTranslations;
    use HasSitemap;

    protected $table = 'categories';
    protected $primaryKey = 'id';
    public $translatable = ['name', 'description', 'h1_tag', 'h2_tag', 'meta_title', 'meta_desc', 'meta_kw'];
    public  $selColmns = ['id as cat_id','name','icon','slug','id','parent_id','header_image','store_count' ];

    protected $casts = [
        'recom_store' => 'array'
    ];

    public function ads()
    {
        return $this->belongsTo('Yajny\Models\Ad', 'category_id', 'id')->withoutGlobalScopes();
    }

    public function store_categories() {
        return $this->hasMany('Yajny\Models\StoreCategories', 'id', 'category_id');
    }

    public function parent() {
        return $this->hasOne(static::class, 'id','parent_id');
    }

      //each category might have multiple children
    public function children() {
        return $this->hasMany(static::class,'parent_id','id')->orderBy('name', 'asc');
    }

    public function scopeIsParent($q){
        return $q->where('parent_id',NULL);
    }

    public function getSearchResult(): SearchResult
    {
        $locale = app()->getLocale();
        if (request('region')) {
            $locale .= "-" . request('region');
        }
        $url = ( config('app.purpose') == 'frontend' ) ? route('store.category', [$locale, $this->slug]) : '';


        return new \Spatie\Searchable\SearchResult(
           $this,
           $this->name_lang ?? $this->name,
           $url
        );
    }

    public static function mapItems($item)
    {
        return [
            'id' => $item->id,
            'name' => $item->getTranslations('name') ,
            'slug' => $item->slug,
            'icon' => $item->icon,
            'header_image' => $item->header_image,
            'parent_id' => $item->parent_id
        ];
    }
}
