package dev.lions.user.manager.dto.sync;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

import java.io.Serializable;

/**
 * DTO représentant le résultat d'une synchronisation
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@Schema(description = "Résultat d'une synchronisation avec Keycloak")
public class SyncResultDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    @Schema(description = "Nom du realm synchronisé", example = "lions")
    private String realmName;

    @Schema(description = "Nombre d'utilisateurs synchronisés", example = "150")
    private int usersCount;

    @Schema(description = "Nombre de rôles realm synchronisés", example = "25")
    private int realmRolesCount;

    @Schema(description = "Nombre de rôles client synchronisés", example = "50")
    private int clientRolesCount;

    @Schema(description = "Indique si la synchronisation a réussi", example = "true")
    private boolean success;

    @Schema(description = "Message d'erreur si la synchronisation a échoué")
    private String errorMessage;

    @Schema(description = "Timestamp de début de la synchronisation (millisecondes)", example = "1699545600000")
    private long startTime;

    @Schema(description = "Timestamp de fin de la synchronisation (millisecondes)", example = "1699545615000")
    private long endTime;

    /**
     * Retourne la durée de la synchronisation en millisecondes
     * @return durée en ms
     */
    public long getDurationMs() {
        return endTime - startTime;
    }
}

