<?php

namespace App\Filament\Resources\Users\Schemas;

use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
use Functional\Users\Enums\Units;

class UserForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                TextInput::make('name')
                    ->label('Nom')
                    ->required(),
                TextInput::make('email')
                    ->label('Email')
                    ->email()
                    ->required(),
                DateTimePicker::make('email_verified_at')
                    ->label('Email vérifié le'),
                // Requis à la création, laissé vide à l'édition pour ne pas écraser le mot de passe
                // existant (le cast 'hashed' du modèle User se charge du hachage à la sauvegarde).
                TextInput::make('password')
                    ->label('Mot de passe')
                    ->password()
                    ->revealable()
                    ->required(fn (string $operation): bool => $operation === 'create')
                    ->dehydrated(fn (?string $state): bool => filled($state))
                    ->dehydrateStateUsing(fn (?string $state): ?string => filled($state) ? $state : null),
                TextInput::make('locale')
                    ->label('Langue')
                    ->required()
                    ->default('fr'),
                Select::make('units')
                    ->label('Unités')
                    ->options(Units::class)
                    ->default('metric')
                    ->required(),
                TextInput::make('timezone')
                    ->label('Fuseau horaire'),
                TextInput::make('avatar_path')
                    ->label('Avatar (chemin)'),
                TextInput::make('oidc_sub')
                    ->label('Identifiant OIDC'),
                // Assignation des rôles Spatie (guard 'web') : pilote l'accès au back-office.
                Select::make('roles')
                    ->label('Rôles')
                    ->relationship('roles', 'name')
                    ->multiple()
                    ->preload()
                    ->searchable()
                    ->columnSpanFull(),
            ]);
    }
}
