<?php

namespace App\Livewire\Layout;

use App\Livewire\Actions\Logout;
use Livewire\Component;

class Navigation extends Component
{

    public $menuItems;
    public string $search = '';

    public function mount()
    {
        $this->menuItems = collect([
            [
                'icon' => 'home-line',
                'label' => 'Dashboard',
                'route' => 'dashboard',
                'permission' => 'admin.dashboard.index',
            ],
            [
                'icon' => 'building-07',
                'label' => 'Clientes',
                'route' => 'clients.index',
                'permission' => 'admin.clients.index',
            ],
            [
                'icon' => 'server-04',
                'label' => 'Entornos',
                'route' => 'environments.index',
                'permission' => 'admin.environments.index',
            ],
            [
                'icon' => 'check-done-02',
                'label' => 'Licencias',
                'route' => 'license_tokens.index',
                'permission' => 'admin.license-tokens.index',
            ],
            [
                'icon' => 'package',
                'label' => 'Productos',
                'route' => 'products.index',
                'permission' => 'admin.products.index',
            ],
            [
                'icon' => 'clipboard',
                'label' => 'API Logs',
                'route' => 'api-logs.index',
                'permission' => 'admin.api-logs.index',
            ],
            [
                'icon' => 'users',
                'label' => 'Usuarios',
                'route' => 'users.index',
                'permission' => 'admin.users.index',
            ]
        ])->filter(function ($item) {
            return auth()->user()?->can($item['permission'] ?? null);
        })->values()->toArray();
    }

    public function getFilteredMenuItemsProperty()
    {
        if (empty($this->search)) {
            return $this->menuItems;
        }

        $searchLower = strtolower($this->search);
        
        return collect($this->menuItems)->filter(function ($item) use ($searchLower) {
            return str_contains(strtolower($item['label']), $searchLower) 
                || str_contains(strtolower($item['route']), $searchLower);
        })->values()->toArray();
    }

    public function render()
    {
        return view('livewire.layout.navigation');
    }

    public function logout(Logout $logout): void
    {
        $logout();
        $this->redirect('/login', navigate: true);
    }
}
