package dev.lions.unionflow.server.api.dto.user.request;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import java.util.List;
import java.util.Map;
import lombok.Builder;

/**
 * Requête de création d'un nouvel utilisateur Keycloak.
 *
 * @param username      Nom d'utilisateur unique.
 * @param prenom        Prénom de l'utilisateur.
 * @param nom           Nom de l'utilisateur.
 * @param email         Adresse email (doit être unique).
 * @param password      Mot de passe initial.
 * @param enabled       Indique si le compte est activé (par défaut true).
 * @param emailVerified Indique si l'email est vérifié (par défaut false).
 * @param realmRoles    Liste des rôles à assigner.
 * @param attributes    Attributs personnalisés (optionnel).
 * @author UnionFlow Team
 * @version 1.0
 * @since 2026-02-28
 */
@Builder
public record CreateUserRequest(
        @NotBlank(message = "Le nom d'utilisateur est obligatoire") @Size(min = 3, max = 50) String username,

        @NotBlank(message = "Le prénom est obligatoire") @Size(max = 100) String prenom,

        @NotBlank(message = "Le nom est obligatoire") @Size(max = 100) String nom,

        @NotBlank(message = "L'email est obligatoire") @Email(message = "Format d'email invalide") String email,

        @NotBlank(message = "Le mot de passe est obligatoire") @Size(min = 8, message = "Le mot de passe doit contenir au moins 8 caractères") String password,

        Boolean enabled,

        Boolean emailVerified,

        List<String> realmRoles,

        Map<String, List<String>> attributes) {
}
