<?php

namespace App\Providers\Filament;

use AchyutN\FilamentLogViewer\FilamentLogViewer;
use App\Enums\RoleEnum;
use App\Filament\Pages\Auth\Login;
use App\Filament\Pages\Profile;
use BezhanSalleh\FilamentShield\FilamentShieldPlugin;
use DiogoGPinto\AuthUIEnhancer\AuthUIEnhancerPlugin;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages\Dashboard;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Support\Enums\Width;
use Filament\Widgets\AccountWidget;
use Hammadzafar05\MobileBottomNav\MobileBottomNav;
use Hammadzafar05\MobileBottomNav\MobileBottomNavItem;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use Saade\Facehash\Enums\Variant;
use Saade\FilamentFacehash\FacehashPlugin;
use Saade\FilamentFacehash\FacehashProvider;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            ->viteTheme('resources/css/filament/admin/theme.css')
            ->login(Login::class)
            ->profile(Profile::class)
            ->colors([
                'primary' => Color::Violet,
            ])
            ->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources')
            ->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages')
            ->pages([
                Dashboard::class,
            ])
            ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets')
            ->widgets([
                AccountWidget::class,
            ])
            ->middleware([
                EncryptCookies::class,
                AddQueuedCookiesToResponse::class,
                StartSession::class,
                AuthenticateSession::class,
                ShareErrorsFromSession::class,
                VerifyCsrfToken::class,
                SubstituteBindings::class,
                DisableBladeIconComponents::class,
                DispatchServingFilamentEvent::class,
            ])
            ->authMiddleware([
                Authenticate::class,
            ])
            ->plugins([
                FilamentShieldPlugin::make()
                    ->navigationSort(999)
                    ->navigationGroup('Pelindung'),

                AuthUIEnhancerPlugin::make()
                    ->formPanelPosition('left')
                    ->formPanelWidth('40%')
                    ->emptyPanelBackgroundImageUrl(asset('images/login.jpg')),

                FacehashPlugin::make()
                    ->size(40)
                    ->variant(Variant::Gradient)
                    ->initial(true)
                    ->colors([
                        '#ec4899',
                        '#f59e0b',
                        '#3b82f6',
                        '#f97316',
                        '#10b981',
                    ]),

                MobileBottomNav::make()
                    ->items([
                        MobileBottomNavItem::make('Dasbor')
                            ->icon('heroicon-m-home')
                            ->activeIcon('heroicon-s-home')
                            ->url('/admin')
                            ->isActive(fn () => request()->is('admin')),

                        MobileBottomNavItem::make('Produksi Telur')
                            ->icon('heroicon-m-rectangle-group')
                            ->url('/admin/manage/egg-collections')
                            ->isActive(fn () => request()->is('admin/manage/egg-collections')),

                        MobileBottomNavItem::make('Pesanan')
                            ->icon('heroicon-m-shopping-cart')
                            ->url('/admin/manage/orders')
                            ->isActive(fn () => request()->is('admin/manage/orders')),

                        MobileBottomNavItem::make('Barang Tertunda')
                            ->icon('heroicon-m-clock')
                            ->url('/admin/manage/delayed-goods')
                            ->isActive(fn () => request()->is('admin/manage/delayed-goods')),
                    ])
                    ->moreButton(false),

                FilamentLogViewer::make()
                    ->navigationGroup('Sistem')
                    ->navigationIcon('heroicon-o-server-stack')
                    ->navigationLabel('Log')
                    ->navigationUrl('/system/logs')
                    ->pollingTime(null)
                    ->authorize(fn (): bool => auth()->user()->hasRole(RoleEnum::DEVELOPER->value)),
            ])
            ->navigationGroups([
                'Master',
                'Kelola',
                'Pakan',
                'Keuangan',
                'Pelindung',
                'Sistem',
            ])
            ->breadcrumbs(false)
            ->globalSearch(false)
            ->defaultAvatarProvider(FacehashProvider::class)
            ->maxContentWidth(Width::Full);
    }
}
