<?php

namespace App\Models\Backoffice;

use App\Models\Backoffice\Support\BaseModel;

use App\Models\Backoffice\Traits\LanguageSupportTrait;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

class MenuItem extends BaseModel
{
    use LanguageSupportTrait;

    protected $with = ['languages'];
    protected $casts = [
        'active' => 'boolean',
        'use_object_title' => 'boolean',
    ];

    public function menu()
    {
        return $this->belongsTo(Menu::class);
    }

    public function parent()
    {
        return $this->belongsTo(MenuItem::class, 'parent_id');
    }

    public function page()
    {
        return $this->belongsTo(Page::class);
    }

    public function menuItems()
    {
        return $this->hasMany(MenuItem::class, 'parent_id')->orderBy('position', 'asc');
    }

    public function scopeFull($query)
    {
        $query->setEagerLoads(array());
        $languageRelation = $this->languages();
        $languageTable = $languageRelation->getRelated()->getTable();
        $languageFK = $languageRelation->getQualifiedForeignKeyName();
        $lang = LaravelLocalization::getCurrentLocale();
        $query->join($languageTable, function ($join) use ($languageTable, $languageFK, $lang) {
            $join->on("{$this->getTable()}.id", "=", "{$languageFK}")
                ->where("{$languageTable}.language_id", "=", $lang);
        });

        return $query;
    }
}
