<?php

namespace App\Models\Backoffice;

use App\Models\Backoffice\Support\BaseModel;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

class Menu extends BaseModel
{
    public function menuItems()
    {
        return $this->hasMany(MenuItem::class);
    }

    public function getStructuredItems()
    {
        $menuItems = $this->menuItems()->with(['page', 'languages'])->orderBy('position')->get();
        $list = [];
        $languages = LaravelLocalization::getSupportedLanguagesKeys();
        
        foreach ($menuItems as $menuItem) {
            $frontendItem = [
                'id' => $menuItem->id,
                'parent_id' => $menuItem->parent_id,
                'menu_id' => $menuItem->menu_id,
                'page_id' => $menuItem->page_id,
                'target' => $menuItem->target,
                'position' => $menuItem->position,
                'active' => $menuItem->active,
                'new_window' => $menuItem->target === '_blank',
                'type' => $menuItem->page_id ? 'page' : 'link',
                'entry' => $menuItem->page,
                'title' => [],
                'url' => []
            ];
            
            foreach ($menuItem->languages as $lang) {
                $frontendItem['title'][$lang->language_id] = $lang->title;
                $frontendItem['url'][$lang->language_id] = $lang->url;
            }
            
            foreach ($languages as $lang) {
                if (!isset($frontendItem['title'][$lang])) {
                    $frontendItem['title'][$lang] = '';
                }
                if (!isset($frontendItem['url'][$lang])) {
                    $frontendItem['url'][$lang] = '';
                }
            }
            
            $list[] = $frontendItem;
        }
        return $list;
    }

    private function _structureMenu($listItems, $root = null)
    {
        $return = [];
        foreach ($listItems as $id => $menuItem) {
            if ($menuItem['parent_id'] == $root) {
                unset($listItems[$id]);
                $menuItem['children'] = $this->_structureMenu($listItems, $menuItem['id']);
                $return[] = $menuItem;
            }
        }
        return $return;
    }

}
