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

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.LocalDate;

import lombok.Builder;

/**
 * Requête de création d'un membre.
 *
 * <p>
 * Immutable via {@code record}. Exclut l'ID,
 * les champs d'audit, et le numéroMembre
 * (généré côté serveur).
 *
 * @author UnionFlow Team
 * @version 3.0
 * @since 2026-02-21
 * @param prenom            prénom
 * @param nom               nom de famille
 * @param email             email
 * @param telephone         téléphone
 * @param telephoneWave     numéro Wave
 * @param dateNaissance     date de naissance
 * @param profession        profession
 * @param photoUrl          URL de la photo
 * @param statutMatrimonial statut matrimonial
 * @param nationalite       nationalité
 * @param typeIdentite      type pièce d'identité
 * @param numeroIdentite    numéro d'identité
 */
@Builder
public record CreateMembreRequest(
                @NotBlank @Size(max = 100) String prenom,
                @NotBlank @Size(max = 100) String nom,
                @NotBlank @Email @Size(max = 255) String email,
                @Size(max = 20) String telephone,
                @Size(max = 13) String telephoneWave,
                @NotNull LocalDate dateNaissance,
                @Size(max = 100) String profession,
                @Size(max = 500) String photoUrl,
                @Size(max = 50) String statutMatrimonial,
                @Size(max = 100) String nationalite,
                @Size(max = 50) String typeIdentite,
                @Size(max = 100) String numeroIdentite) {
}
