<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\MenuResource;
use App\Http\Requests\Api\BaseShow;
use App\Libs\Services\MenuService;
use Illuminate\Support\Facades\Auth;

class MenuController extends Controller
{
    protected MenuService $menuService;

    public function __construct(MenuService $menuService) {
        $this->menuService = $menuService;
    }

    /**
     * Display a listing of the resource.
     *
     * @return JsonResource
     */
    public function show(BaseShow $request)
    {
        $data = $request->validated();
        $userData = Auth::user();

        $hasLegalOpinionsPermission = $userData->member->user_permission_level
            ? $userData->legal_opinion_permission
            : $userData->member->legal_opinions;

        $hasFinanceSubCommitteePermission = $userData->finance_sub_committee_permission;

        if ($userData->member->member_type !== 'noType') {
            $menu = $this->menuService->findBySlug($data['slug']);

            if ($userData->member->legal_committee) {
                $legalCommitteesMenu = $this->menuService->findBySlug('menu-legal-committees');
                if ($legalCommitteesMenu) {
                    $menu->menuItems = $menu->menuItems->merge($legalCommitteesMenu->menuItems);
                }
            }

            if ($hasLegalOpinionsPermission) {
                $legalOpinionsMenu = $this->menuService->findBySlug('menu-legal-opinions');
                if ($legalOpinionsMenu) {
                    $menu->menuItems = $menu->menuItems->merge($legalOpinionsMenu->menuItems);
                }
            }

            if ($hasFinanceSubCommitteePermission) {
                $financeSubCommitteeMenu = $this->menuService->findBySlug('menu-finance-sub-committee');
                if ($financeSubCommitteeMenu) {
                    $menu->menuItems = $menu->menuItems->merge($financeSubCommitteeMenu->menuItems);
                }
            }
        } else {
            if ($hasLegalOpinionsPermission) {
                $menu = $this->menuService->findBySlug('menu-legal-opinions');
            }
        }

        if (!empty($menu)) {
            return [
                'data' => new MenuResource($menu),
            ];
        }

        return response()->json([], 404);
    }
}
