<?php

namespace App\Filament\Resources\Users\Schemas;

use Filament\Schemas\Schema;
use Illuminate\Support\Facades\Hash;
use Filament\Schemas\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Doriiaan\FilamentAstrotomic\TranslatableTab;
use Doriiaan\FilamentAstrotomic\Schemas\Components\TranslatableTabs;

class UserForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                Section::make(__('filament/admin/user_resource.basic_information'))
                    ->description(__('filament/admin/user_resource.basic_information_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        TextInput::make('name')
                            ->label(__('filament/admin/user_resource.name'))
                            ->placeholder(__('filament/admin/user_resource.name_placeholder'))
                            ->helperText(__('filament/admin/user_resource.name_help'))
                            ->required()
                            ->minLength(2)
                            ->maxLength(255),
                        // TranslatableTabs::make()
                        //     ->localeTabSchema(fn(TranslatableTab $tab) => [
                        //         TextInput::make($tab->makeName('name'))
                        //             ->label(__('filament/admin/user_resource.name'))
                        //             ->placeholder(__('filament/admin/user_resource.name_placeholder'))
                        //             ->helperText(__('filament/admin/user_resource.translated_name_help'))
                        //             ->nullable()
                        //             ->minLength(2)
                        //             ->maxLength(255),
                        //     ]),
                    ]),
                Section::make(__('filament/admin/user_resource.authentication'))
                    ->description(__('filament/admin/user_resource.authentication_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        TextInput::make('email')
                            ->label(__('filament/admin/user_resource.email'))
                            ->placeholder(__('filament/admin/user_resource.email_placeholder'))
                            ->helperText(__('filament/admin/user_resource.email_help'))
                            ->email()
                            ->unique(ignoreRecord: true)
                            ->required(),
                        TextInput::make('password')
                            ->label(__('filament/admin/user_resource.password'))
                            ->placeholder('••••••••')
                            ->helperText(__('filament/admin/user_resource.password_help'))
                            ->password()
                            ->confirmed()
                            ->dehydrateStateUsing(fn($state) => filled($state) ? Hash::make($state) : null)
                            ->dehydrated(fn($state) => filled($state))
                            ->required(fn(string $context): bool => $context === 'create')
                            ->minLength(8)
                            ->maxLength(255),
                        TextInput::make('password_confirmation')
                            ->label(__('filament/admin/user_resource.password_confirmation'))
                            ->helperText(__('filament/admin/user_resource.password_confirmation_help'))
                            ->required(fn(string $context): bool => $context === 'create')
                            ->password()
                            ->dehydrated(false),
                    ]),
                Section::make(__('filament/admin/user_resource.permissions'))
                    ->description(__('filament/admin/user_resource.permissions_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        Select::make('tenant_id')
                            ->label(__('filament/admin/user_resource.tenant_id'))
                            ->relationship('tenant', 'name')
                            ->searchable()
                            ->preload()
                            ->required()
                            ->visible(fn() => auth()->user()?->is_system_admin ?? false)
                            ->default(__('filament/admin/user_resource.tenant_id_default')),
                        Toggle::make('is_system_admin')
                            ->label(__('filament/admin/user_resource.is_system_admin'))
                            ->helperText('المستخدم الذي يمكنه الوصول لجميع المؤسسات')
                            ->visible(fn() => auth()->user()?->is_system_admin ?? false)
                            ->default(false),
                        Toggle::make('is_tenant_owner')
                            ->label(__('filament/admin/user_resource.is_tenant_owner'))
                            ->helperText('مالك المؤسسة له صلاحيات كاملة داخل مؤسسته')
                            ->visible(fn() => auth()->user()?->is_system_admin ?? false)
                            ->default(false),
                        Select::make('roles')
                            ->label(__('filament/admin/user_resource.roles'))
                            ->placeholder(__('filament/admin/user_resource.roles_placeholder'))
                            ->helperText(__('filament/admin/user_resource.roles_help'))
                            ->searchable()
                            ->preload()
                            ->required()
                            ->multiple()
                            ->relationship(
                                name: 'roles',
                                titleAttribute: 'name',
                                modifyQueryUsing: function ($query) {
                                    $user = auth()->user();

                                    // System Admin يرى جميع الأدوار
                                    if ($user->is_system_admin) {
                                        return $query;
                                    }

                                    // Tenant users يروا فقط أدوار مؤسستهم أو الأدوار العامة (tenant_id = null)
                                    if ($user->tenant_id) {
                                        return $query->where(function ($q) use ($user) {
                                            $q->where('tenant_id', $user->tenant_id)
                                                ->orWhereNull('tenant_id');
                                        });
                                    }

                                    // مستخدم بدون tenant_id يرى فقط الأدوار العامة
                                    return $query->whereNull('tenant_id');
                                }
                            ),
                    ]),
            ]);
    }
}
