package fr.titionfire.ffsaf.rest.data;

import fr.titionfire.ffsaf.data.model.MembreModel;
import fr.titionfire.ffsaf.net2.data.SimpleClubModel;
import fr.titionfire.ffsaf.utils.Categorie;
import fr.titionfire.ffsaf.utils.Genre;
import fr.titionfire.ffsaf.utils.GradeArbitrage;
import fr.titionfire.ffsaf.utils.RoleAsso;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

import java.util.Date;

@Data
@Builder
@AllArgsConstructor
@RegisterForReflection
public class SimpleMembre {
    @Schema(description = "L'identifiant du membre.", example = "1")
    private long id;
    @Schema(description = "L'identifiant long du membre (userID).", example = "e81d1d35-d897-421e-8086-6c5e74d13c6e")
    private String userId;
    @Schema(description = "Le nom du membre.", example = "Dupont")
    private String lname = "";
    @Schema(description = "Le prénom du membre.", example = "Jean")
    private String fname = "";
    @Schema(description = "La catégorie du membre.", example = "SENIOR")
    private Categorie categorie;
    @Schema(description = "Le club du membre.")
    private SimpleClubModel club;
    @Schema(description = "Le genre du membre.", example = "H")
    private Genre genre;
    @Schema(description = "Le numéro de licence du membre.", example = "12345")
    private Integer licence;
    @Schema(description = "Le pays du membre.", example = "FR")
    private String country;
    @Schema(description = "La date de naissance du membre.")
    private Date birth_date;
    @Schema(description = "L'adresse e-mail du membre.", example = "jean.dupont@example.com")
    private String email;
    @Schema(description = "Le rôle du membre dans l'association.", example = "MEMBRE")
    private RoleAsso role;
    @Schema(description = "Le grade d'arbitrage du membre.", example = "N/A")
    private GradeArbitrage grade_arbitrage;
    @Schema(hidden = true)
    private String url_photo;

    public static SimpleMembre fromModel(MembreModel model) {
        if (model == null)
            return null;

        return new SimpleMembreBuilder()
                .id(model.getId())
                .userId(model.getUserId())
                .lname(model.getLname())
                .fname(model.getFname())
                .categorie(model.getCategorie())
                .club(SimpleClubModel.fromModel(model.getClub()))
                .genre(model.getGenre())
                .licence(model.getLicence())
                .country(model.getCountry())
                .birth_date(model.getBirth_date())
                .email(model.getEmail())
                .role(model.getRole())
                .grade_arbitrage(model.getGrade_arbitrage())
                .url_photo(model.getUrl_photo())
                .build();
    }
}
