package dev.lions.unionflow.client.converter;

import jakarta.faces.component.UIComponent;
import jakarta.faces.context.FacesContext;
import jakarta.faces.convert.Converter;
import jakarta.faces.convert.ConverterException;
import jakarta.faces.convert.FacesConverter;

import java.util.UUID;

/**
 * Convertisseur JSF pour les paramètres de vue et champs liés à {@link UUID}.
 * Permet la conversion String ↔ UUID dans les f:viewParam et composants d'entrée.
 */
@FacesConverter(value = "uuidConverter", managed = true)
public class UuidConverter implements Converter<UUID> {

    @Override
    public UUID getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || value.isBlank()) {
            return null;
        }
        try {
            return UUID.fromString(value.trim());
        } catch (IllegalArgumentException e) {
            throw new ConverterException("Identifiant invalide : " + value, e);
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, UUID value) {
        if (value == null) {
            return "";
        }
        return value.toString();
    }
}
