<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Arr;

class MenusCollection extends ResourceCollection
{
    protected $fieldsToRemoveFromMenuItem = [
        "position",
        "active",
        "created_at",
        "updated_at",
        "children",
        "translation_id",
        "menu_item_id",
        "languages",
        "language_id"
    ];

    private $footer;
    private $removeMenuItemFields;

    /**
     * Create a new resource instance.
     *
     * @param  mixed    $resource
     * @param  mixed    $footer
     * @param boolean $removeMenuItemFields
     * @return void
     */
    public function __construct($resource, $footer = null, bool $removeMenuItemFields = true)
    {
        parent::__construct($resource);

        $this->footer = $footer;
        $this->resource = $this->collectResource($resource);
        $this->removeMenuItemFields = $removeMenuItemFields;
    }

    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        if ($this->removeMenuItemFields) {
            foreach ($this->collection as $idxCollection => $collection) {
                foreach ($collection->menuItems as $idxItem => $item) {
                    $element = Arr::except($item->toArray(), $this->fieldsToRemoveFromMenuItem);
                    $element['url'] = lang_uri($element['url'], $item->language_id)?: '/';
                    $this->collection[$idxCollection]->menuItems[$idxItem] = $element;
                }
            }
        }

        $out = [
            'data' => $this->collection
        ];

        if(!is_null($this->footer)) {
            $out['footer'] = $this->footer;
        }

        return $out;
    }
}
