<?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',
            ],
            [
                // **La pantalla existía y no se llegaba a ella desde ninguna parte**: ni
                // menú, ni Dashboard, ni Configuración. Solo escribiendo la URL (MGR-070).
                //
                // Va después de Productos y no pegada a Entornos: se lee de lo que
                // vendemos a lo que está instalado —producto, luego plugin— y no como una
                // segunda pantalla de entornos, que es lo que sugería el otro sitio.
                //
                // `cube-02` y no `package`, que es el de Productos: son cosas distintas
                // —un producto es lo que se vende, un plugin es lo que está instalado— y
                // con el mismo icono se leían como la misma sección.
                'icon' => 'cube-02',
                'label' => 'Plugins',
                'route' => 'plugins.index',
                'permission' => 'admin.plugins.environment',
            ],
            [
                // Antes esta entrada era "API Logs" y apuntaba al visor. Ahora apunta a la
                // sección de Monitorización, que agrupa bloqueos, ranking de IPs, avisos
                // enviados y el propio visor como una pestaña más: el visor solo era una
                // de las cosas que hay que revisar.
                'icon' => 'clipboard',
                'label' => 'Monitorización',
                'route' => 'monitoring.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);
    }
}
