package io.github.gasparbarancelli;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;

class NativeQueryBeanDefinition {

    private NativeQueryBeanDefinition() {}

    static AbstractBeanDefinition of(Class<? extends NativeQuery> classe, Object source) {
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(classe.getName());
        builder.getRawBeanDefinition().setSource(source);
        builder.setLazyInit(false);
        builder.setScope(BeanDefinition.SCOPE_SINGLETON);
        AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
        beanDefinition.setInstanceSupplier(() -> source);
        beanDefinition.setAttribute("factoryBeanObjectType", classe.getName());
        return beanDefinition;
    }

}