toggleTwoFactorService = $toggleTwoFactorService;
    }
    public function getMaxWidth(): MaxWidth|string
    {
        return config('panel.filament.display-width', 'screen-2xl');
    }
    protected function getForms(): array
    {
        $oauthProviders = collect(OAuthProvider::get())->filter(fn (OAuthProvider $provider) => $provider->isEnabled())->all();
        return [
            'form' => $this->form(
                $this->makeForm()
                    ->schema([
                        Tabs::make()->persistTabInQueryString()
                            ->schema([
                                Tab::make(trans('profile.tabs.account'))
                                    ->icon('tabler-user')
                                    ->schema([
                                        TextInput::make('username')
                                            ->label(trans('profile.username'))
                                            ->disabled()
                                            ->readOnly()
                                            ->dehydrated(false)
                                            ->maxLength(255)
                                            ->unique(ignoreRecord: true)
                                            ->autofocus(),
                                        TextInput::make('email')
                                            ->prefixIcon('tabler-mail')
                                            ->label(trans('profile.email'))
                                            ->email()
                                            ->required()
                                            ->maxLength(255)
                                            ->unique(ignoreRecord: true),
                                        TextInput::make('password')
                                            ->label(trans('profile.password'))
                                            ->password()
                                            ->prefixIcon('tabler-password')
                                            ->revealable(filament()->arePasswordsRevealable())
                                            ->rule(Password::default())
                                            ->autocomplete('new-password')
                                            ->dehydrated(fn ($state): bool => filled($state))
                                            ->dehydrateStateUsing(fn ($state): string => Hash::make($state))
                                            ->live(debounce: 500)
                                            ->same('passwordConfirmation'),
                                        TextInput::make('passwordConfirmation')
                                            ->label(trans('profile.password_confirmation'))
                                            ->password()
                                            ->prefixIcon('tabler-password-fingerprint')
                                            ->revealable(filament()->arePasswordsRevealable())
                                            ->required()
                                            ->visible(fn (Get $get): bool => filled($get('password')))
                                            ->dehydrated(false),
                                        Select::make('timezone')
                                            ->label(trans('profile.timezone'))
                                            ->required()
                                            ->prefixIcon('tabler-clock-pin')
                                            ->default('UTC')
                                            ->selectablePlaceholder(false)
                                            ->options(fn () => collect(DateTimeZone::listIdentifiers())->mapWithKeys(fn ($tz) => [$tz => $tz]))
                                            ->searchable()
                                            ->native(false),
                                        Select::make('language')
                                            ->label(trans('profile.language'))
                                            ->required()
                                            ->prefixIcon('tabler-flag')
                                            ->live()
                                            ->default('en')
                                            ->selectablePlaceholder(false)
                                            ->helperText(fn ($state, LanguageService $languageService) => new HtmlString($languageService->isLanguageTranslated($state) ? '' : trans('profile.language_help', ['state' => $state])))
                                            ->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages())
                                            ->native(false),
                                        FileUpload::make('avatar')
                                            ->visible(fn () => config('panel.filament.uploadable-avatars'))
                                            ->avatar()
                                            ->acceptedFileTypes(['image/png'])
                                            ->directory('avatars')
                                            ->getUploadedFileNameForStorageUsing(fn () => $this->getUser()->id . '.png')
                                            ->hintAction(function (FileUpload $fileUpload) {
                                                $path = $fileUpload->getDirectory() . '/' . $this->getUser()->id . '.png';
                                                return Action::make('remove_avatar')
                                                    ->icon('tabler-photo-minus')
                                                    ->iconButton()
                                                    ->hidden(fn () => !$fileUpload->getDisk()->exists($path))
                                                    ->action(fn () => $fileUpload->getDisk()->delete($path));
                                            }),
                                    ]),
                                Tab::make(trans('profile.tabs.oauth'))
                                    ->icon('tabler-brand-oauth')
                                    ->visible(count($oauthProviders) > 0)
                                    ->schema(function () use ($oauthProviders) {
                                        $actions = [];
                                        foreach ($oauthProviders as $oauthProvider) {
                                            $id = $oauthProvider->getId();
                                            $name = $oauthProvider->getName();
                                            $unlink = array_key_exists($id, $this->getUser()->oauth ?? []);
                                            $actions[] = Action::make("oauth_$id")
                                                ->label(($unlink ? trans('profile.unlink') : trans('profile.link')) . $name)
                                                ->icon($unlink ? 'tabler-unlink' : 'tabler-link')
                                                ->color(Color::hex($oauthProvider->getHexColor()))
                                                ->action(function (UserUpdateService $updateService) use ($id, $name, $unlink) {
                                                    if ($unlink) {
                                                        $oauth = auth()->user()->oauth;
                                                        unset($oauth[$id]);
                                                        $updateService->handle(auth()->user(), ['oauth' => $oauth]);
                                                        $this->fillForm();
                                                        Notification::make()
                                                            ->title(trans('profile.unlinked', ['name' => $name]))
                                                            ->success()
                                                            ->send();
                                                    } else {
                                                        redirect(Socialite::with($id)->redirect()->getTargetUrl());
                                                    }
                                                });
                                        }
                                        return [Actions::make($actions)];
                                    }),
                                Tab::make(trans('profile.tabs.2fa'))
                                    ->icon('tabler-shield-lock')
                                    ->schema(function (TwoFactorSetupService $setupService) {
                                        if ($this->getUser()->use_totp) {
                                            return [
                                                Placeholder::make('2fa-already-enabled')
                                                    ->label(trans('profile.2fa_enabled')),
                                                Textarea::make('backup-tokens')
                                                    ->hidden(fn () => !cache()->get("users.{$this->getUser()->id}.2fa.tokens"))
                                                    ->rows(10)
                                                    ->readOnly()
                                                    ->dehydrated(false)
                                                    ->formatStateUsing(fn () => cache()->get("users.{$this->getUser()->id}.2fa.tokens"))
                                                    ->helperText(trans('profile.backup_help'))
                                                    ->label(trans('profile.backup_codes')),
                                                TextInput::make('2fa-disable-code')
                                                    ->label(trans('profile.disable_2fa'))
                                                    ->helperText(trans('profile.disable_2fa_help')),
                                            ];
                                        }
                                        ['image_url_data' => $url, 'secret' => $secret] = cache()->remember(
                                            "users.{$this->getUser()->id}.2fa.state",
                                            now()->addMinutes(5), fn () => $setupService->handle($this->getUser())
                                        );
                                        $options = new QROptions([
                                            'svgLogo' => public_path('pelican.svg'),
                                            'svgLogoScale' => 0.05,
                                            'addLogoSpace' => true,
                                            'logoSpaceWidth' => 13,
                                            'logoSpaceHeight' => 13,
                                            'version' => Version::AUTO,
                                            // 'outputInterface' => QRSvgWithLogo::class,
                                            'outputBase64' => false,
                                            'eccLevel' => EccLevel::H, // ECC level H is necessary when using logos
                                            'addQuietzone' => true,
                                            // 'drawLightModules' => true,
                                            'connectPaths' => true,
                                            'drawCircularModules' => true,
                                            // 'circleRadius' => 0.45,
                                            'svgDefs' => '