package dev.lions.unionflow.client.config;

import dev.lions.unionflow.client.el.QuarkusArcELResolver;
import jakarta.faces.application.Application;
import jakarta.faces.application.ApplicationFactory;
import org.jboss.logging.Logger;

/**
 * ApplicationFactory personnalisé pour Quarkus Arc.
 * 
 * <p>Cette factory configure l'Application JSF pour utiliser notre ELResolverBuilder
 * personnalisé qui ne tente pas d'obtenir le resolver CDI via BeanManager.getELResolver().
 *
 * @author UnionFlow Team
 * @version 1.0
 */
public class QuarkusApplicationFactory extends ApplicationFactory {

    private static final Logger LOG = Logger.getLogger(QuarkusApplicationFactory.class);
    
    private ApplicationFactory delegate;
    private Application application;

    public QuarkusApplicationFactory(ApplicationFactory delegate) {
        this.delegate = delegate;
    }

    @Override
    public Application getApplication() {
        if (application == null) {
            application = delegate.getApplication();
            
            // Configurer notre ELResolverBuilder personnalisé
            try {
                LOG.info("Configuration de l'ELResolverBuilder personnalisé pour Quarkus Arc");
                
                // Ajouter notre resolver personnalisé
                application.addELResolver(new QuarkusArcELResolver());
                
                LOG.info("ELResolver personnalisé configuré avec succès");
            } catch (Exception e) {
                LOG.error("Erreur lors de la configuration de l'ELResolver personnalisé", e);
                // Ne pas bloquer le démarrage si la configuration échoue
            }
        }
        return application;
    }

    @Override
    public void setApplication(Application application) {
        this.application = application;
        delegate.setApplication(application);
    }
}

