<?php

declare(strict_types=1);

namespace App\Providers\Filament;

use Althinect\FilamentSpatieRolesPermissions\FilamentSpatieRolesPermissionsPlugin;
use App\Filament\Pages\Auth\Login;
use App\Filament\Pages\Dashboard;
use App\Filament\Widgets\DashboardStatsOverview;
use App\Filament\Widgets\LatestOrders;
use App\Filament\Widgets\OrdersChart;
use App\Filament\Widgets\OrdersRevenueChart;
use App\Filament\Widgets\PendingAdminQueueOverview;
use App\Filament\Widgets\PendingWithdrawalsOverview;
use App\Filament\Widgets\ProductsChart;
use Filament\Auth\Pages\EditProfile;
use Filament\FontProviders\LocalFontProvider;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\NavigationGroup;
use Filament\Navigation\NavigationItem;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Support\Facades\FilamentColor;
use Filament\Tables\Table;
use Filament\View\PanelsRenderHook;
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\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
// use Mortezaa97\Reviews\ReviewsPlugin;
// use Mortezaa97\Bookmarks\BookmarksPlugin;
// use Mortezaa97\Brands\BrandsPlugin;
// use Mortezaa97\Catalogs\CatalogsPlugin;
// use Mortezaa97\Coupons\CouponsPlugin;
// use Mortezaa97\Factors\FactorsPlugin;
// use Mortezaa97\Inventories\InventoriesPlugin;
// use Mortezaa97\Orders\OrdersPlugin;
// use Mortezaa97\Reviews\ReviewsPlugin;
// use Mortezaa97\Shop\ShopPlugin;
// use Mortezaa97\Sliders\RegionsPlugin;
// use Mortezaa97\Sliders\SlidersPlugin;
// use Mortezaa97\SmsManager\SmsManagerPlugin;
// use Mortezaa97\Stories\StoriesPlugin;
// use Mortezaa97\Support\SupportPlugin;
// use Mortezaa97\Wallet\WalletPlugin;
// use Mortezaa97\Wishlist\WishlistPlugin;
use Spatie\Permission\Middleware\RoleMiddleware;

class AdminPanelServiceProvider extends PanelProvider
{
    public function boot(): void
    {
        Table::configureUsing(function (Table $table): void {
            $table
                ->emptyStateHeading('موردی یافت نشد')
                ->emptyStateDescription('هنوز رکوردی ثبت نشده است.');
        });
    }

    public function panel(Panel $panel): Panel
    {
        FilamentColor::register([
            'slate' => Color::Slate,
            'gray' => Color::Gray,
            'zinc' => Color::Zinc,
            'neutral' => Color::Neutral,
            'stone' => Color::Stone,
            'red' => Color::Red,
            'orange' => Color::Orange,
            'amber' => Color::Amber,
            'yellow' => Color::Yellow,
            'lime' => Color::Lime,
            'green' => Color::Green,
            'emerald' => Color::Emerald,
            'teal' => Color::Teal,
            'cyan' => Color::Cyan,
            'sky' => Color::Sky,
            'blue' => Color::Blue,
            'indigo' => Color::Indigo,
            'violet' => Color::Violet,
            'purple' => Color::Purple,
            'fuchsia' => Color::Fuchsia,
            'pink' => Color::Pink,
            'rose' => Color::Rose,
        ]);

        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            ->login(Login::class)
            ->profile(EditProfile::class, isSimple: false)
            ->databaseNotifications()
            ->unsavedChangesAlerts()
            ->databaseTransactions()
            ->databaseNotificationsPolling('30s')
            ->sidebarWidth('250px')
            ->sidebarCollapsibleOnDesktop()
            ->maxContentWidth('full')
            ->sidebarFullyCollapsibleOnDesktop()
            ->colors([
                'primary' => Color::Purple,
                'secondary' => Color::Gray,
                'danger' => Color::Rose,
            ])
            ->renderHook(
                PanelsRenderHook::FOOTER,
                fn (): \Illuminate\View\View => view('filament.footer')
            )
            ->spa(hasPrefetching: true)
            ->pages([
                Dashboard::class,
            ])
            ->viteTheme('resources/css/filament/admin/theme.css')
            ->font(
                'Yekan Bakh',
                url: asset('css/fonts.css'),
                provider: LocalFontProvider::class,
            )
            ->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([
                PendingAdminQueueOverview::class,
                DashboardStatsOverview::class,
                PendingWithdrawalsOverview::class,
                ProductsChart::class,
                LatestOrders::class,
            ])
            ->middleware([
                EncryptCookies::class,
                AddQueuedCookiesToResponse::class,
                StartSession::class,
                AuthenticateSession::class,
                ShareErrorsFromSession::class,
                VerifyCsrfToken::class,
                SubstituteBindings::class,
                DisableBladeIconComponents::class,
                DispatchServingFilamentEvent::class,
            ])
            ->authMiddleware([
                Authenticate::class,
                RoleMiddleware::class . ':admin',
            ])
            ->plugins([
                FilamentSpatieRolesPermissionsPlugin::make(),
                // ReviewsPlugin::make(),
                // StoriesPlugin::make(),
                // BookmarksPlugin::make(),
                // RegionsPlugin::make(),
                // ReviewsPlugin::make(),
                // SupportPlugin::make(),
                // WishlistPlugin::make(),
                // WalletPlugin::make(),
                // CatalogsPlugin::make(),
                // FactorsPlugin::make(),
                // InventoriesPlugin::make(),
                // BrandsPlugin::make(),
                // SlidersPlugin::make(),
                // ShopPlugin::make(),
                // AddressPlugin::make(),
                // SmsManagerPlugin::make(),
                // CouponsPlugin::make(),
                // OrdersPlugin::make(),
            ])
            ->navigationGroups([
                NavigationGroup::make('کاربران')
                    ->icon('heroicon-o-users')
                    ->collapsible(),
                NavigationGroup::make('مالی')
                    ->icon('heroicon-o-banknotes')
                    ->collapsible(),
                NavigationGroup::make('پشتیبانی')
                    ->icon('heroicon-o-lifebuoy')
                    ->collapsible(),
                NavigationGroup::make('بلاگ')
                    ->icon('heroicon-o-newspaper')
                    ->collapsible(),
                NavigationGroup::make('فروشگاه')
                    ->icon('heroicon-o-shopping-bag')
                    ->collapsed(),
                NavigationGroup::make('اسلایدرها')
                    ->icon('heroicon-o-photo')
                    ->collapsed(),
                NavigationGroup::make('صفحات')
                    ->icon('heroicon-o-document')  // آیکون مناسب برای صفحات (سند یا صفحه)
                    ->collapsed(),
                NavigationGroup::make('سایر')
                    ->collapsed(),
                NavigationGroup::make('تنظیمات')
                    ->icon('heroicon-o-cog-6-tooth')
                    ->collapsed(),
                NavigationGroup::make('پنل پیامکی')
                    ->icon('heroicon-o-phone')
                    ->collapsed(),
                NavigationGroup::make('درون ریزی/برون ریزی')
                    ->icon('heroicon-o-arrows-up-down')  // آیکون مناسب برای درون‌ریزی/برون‌ریزی (فلش‌های بالا و پایین)
                    ->collapsed(),
                NavigationGroup::make('ویژگی ها')
                    ->icon('heroicon-o-finger-print')  // آیکون مناسب برای ویژگی‌ها (مانند اثر انگشت برای شناسایی ویژگی‌ها)
                    ->collapsed(),
                NavigationGroup::make('مدیریت شعبه ها')
                    ->icon('heroicon-o-building-storefront')  // آیکون مناسب برای مدیریت شعبه‌ها (ساختمان فروشگاه)
                    ->collapsed(),
                NavigationGroup::make('حسابداری')
                    ->icon('heroicon-o-calculator')  // آیکون مناسب برای مدیریت شعبه‌ها (ساختمان فروشگاه)
                    ->collapsed(),
                NavigationGroup::make('انبار')
                    ->icon('heroicon-o-building-storefront')  // آیکون مناسب برای مدیریت شعبه‌ها (ساختمان فروشگاه)
                    ->collapsed(),
                NavigationGroup::make('کاتالوگ')
                    ->icon('heroicon-o-document-text')  // آیکون مناسب برای مدیریت شعبه‌ها (ساختمان فروشگاه)
                    ->collapsed(),
            ])
            ->renderHook(PanelsRenderHook::SIDEBAR_NAV_START, fn () => view('filament.components.navigation-filter'))
            ->navigationItems([
                // NavigationItem::make('لایک‌ها')
                //     ->url(fn () => LikeResource::getUrl('index'))
                //     ->icon('heroicon-o-question-mark-circle')
                //     ->group('تنظیمات')
                //     ->sort(0),
                // NavigationItem::make('نظرات')
                //     ->url(fn () => ReviewResource::getUrl('index'))
                //     ->icon('heroicon-o-question-mark-circle')
                //     ->group('تنظیمات')
                //     ->sort(0),
                // NavigationItem::make('دسته‌بندی‌ها')
                //     ->url(fn () => CategoryResource::getUrl('index'))
                //     ->icon('heroicon-o-question-mark-circle')
                //     ->group('تنظیمات')
                //     ->sort(0),
            ]);
    }
}
