<?php

namespace App\Filament\Resources;

use App\Filament\Resources\PermissionResource\Pages;
use Filament\Actions;
use Filament\Forms;
use Filament\Resources\Resource;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
use Filament\Tables;
use Filament\Tables\Table;
use Spatie\Permission\Models\Permission;

class PermissionResource extends Resource
{
    protected static ?string $model = Permission::class;

    protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-key';

    protected static string | \UnitEnum | null $navigationGroup = 'الأمان والصلاحيات';

    protected static ?string $modelLabel = 'صلاحية';

    protected static ?string $pluralModelLabel = 'الصلاحيات';

    protected static ?int $navigationSort = 21;

    public static function canAccess(): bool
    {
        return auth()->user()?->hasRole('admin') ?? false;
    }

    protected static array $permissionLabels = [
        'view_suppliers' => 'عرض الموردين',
        'create_suppliers' => 'إضافة مورد',
        'edit_suppliers' => 'تعديل مورد',
        'delete_suppliers' => 'حذف مورد',
        'view_products' => 'عرض المنتجات',
        'create_products' => 'إضافة منتج',
        'edit_products' => 'تعديل منتج',
        'delete_products' => 'حذف منتج',
        'view_orders' => 'عرض الطلبات',
        'create_orders' => 'إنشاء طلب',
        'edit_orders' => 'تعديل طلب',
        'delete_orders' => 'حذف طلب',
        'view_purchase_orders' => 'عرض أوامر الشراء',
        'create_purchase_orders' => 'إنشاء أمر شراء',
        'edit_purchase_orders' => 'تعديل أمر شراء',
        'delete_purchase_orders' => 'حذف أمر شراء',
        'manage_point_settings' => 'إدارة إعدادات النقاط',
        'view_financial_reports' => 'عرض التقارير المالية',
        'manage_users' => 'إدارة المستخدمين',
    ];

    public static function form(Schema $schema): Schema
    {
        return $schema
            ->components([
                Section::make('بيانات الصلاحية')
                    ->schema([
                        Forms\Components\TextInput::make('name')
                            ->label('اسم الصلاحية (بالإنجليزية)')
                            ->required()
                            ->unique(ignoreRecord: true)
                            ->maxLength(255)
                            ->helperText('مثال: view_products, edit_orders'),

                        Forms\Components\Select::make('guard_name')
                            ->label('Guard')
                            ->options(['web' => 'Web'])
                            ->default('web')
                            ->required()
                            ->native(false),
                    ])
                    ->columns(2),

                Section::make('الأدوار المرتبطة')
                    ->description('اختر الأدوار التي تمتلك هذه الصلاحية')
                    ->schema([
                        Forms\Components\CheckboxList::make('roles')
                            ->label('')
                            ->relationship('roles', 'name')
                            ->columns(3)
                            ->bulkToggleable(),
                    ]),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('id')
                    ->label('#')
                    ->sortable(),

                Tables\Columns\TextColumn::make('name')
                    ->label('الصلاحية')
                    ->searchable()
                    ->sortable()
                    ->description(fn (Permission $record) => static::$permissionLabels[$record->name] ?? null),

                Tables\Columns\TextColumn::make('roles.name')
                    ->label('الأدوار')
                    ->badge()
                    ->color(fn (string $state): string => match ($state) {
                        'admin' => 'danger',
                        'store_manager' => 'warning',
                        'sales_agent' => 'info',
                        default => 'gray',
                    })
                    ->separator(','),

                Tables\Columns\TextColumn::make('created_at')
                    ->label('تاريخ الإنشاء')
                    ->dateTime('d/m/Y')
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: true),
            ])
            ->defaultSort('id', 'asc')
            ->filters([
                Tables\Filters\SelectFilter::make('roles')
                    ->label('الدور')
                    ->relationship('roles', 'name')
                    ->multiple()
                    ->preload(),
            ])
            ->actions([
                Actions\EditAction::make()->label('تعديل'),
            ])
            ->bulkActions([
                Actions\BulkActionGroup::make([
                    Actions\DeleteBulkAction::make()->label('حذف المحدد'),
                ]),
            ]);
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListPermissions::route('/'),
            'create' => Pages\CreatePermission::route('/create'),
            'edit' => Pages\EditPermission::route('/{record}/edit'),
        ];
    }
}
