<?php

namespace App\Http\Controllers;

use Illuminate\Support\Collection;

class IndexController extends Controller
{
    protected Collection $menuItems;

    public function __construct()
    {
        $this->menuItems = collect([
            $this->createMenuItem('strings.dashboard', 'grid-outline', '/dashboard', ['dashboard.index']),
            $this->createMenuItem('strings.users', 'people-outline', '/users', ['users.index']),
            // New MenuItem
        ]);
    }

    private function createMenuItem(string $name, string $icon, string $link, array $permissions): array
    {
        return compact('name', 'icon', 'link', 'permissions');
    }

    public function index()
    {
        return view('index');
    }

    /**
     * Get initial data for Vue.js application
     */
    public function vue()
    {
        $permissions = $this->getPermissions();
        $notifications = auth()->user()->unreadNotifications()->get()->toArray();

        return [
            'menuItems' => $this->getMenu($permissions),
            'notifications' => $notifications,
        ];
    }

    private function getPermissions(): array
    {
        return auth()->user()->getAllPermissions()
            ->filter(function ($item) {
                return str_contains($item->name, 'index');
            })
            ->pluck('name')
            ->values()
            ->toArray();
    }

    private function getMenu(array $permissions): Collection
    {
        return $this->menuItems->filter(function ($collection) use ($permissions) {
            return count(array_intersect($permissions, $collection['permissions'])) > 0;
        });
    }
}