package dmo.fs.db.dodex.hib;
import io.quarkus.arc.InjectableInstance;
import io.quarkus.arc.Unremovable;
import io.quarkus.hibernate.orm.PersistenceUnit;
import jakarta.enterprise.context.ApplicationScoped;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.model.relational.Database;
import org.hibernate.boot.model.relational.Namespace;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.boot.spi.BootstrapContext;
import org.hibernate.mapping.Table;
import org.hibernate.reactive.mutiny.Mutiny;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Properties;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

@Unremovable
@ApplicationScoped
public class MutinySessionFactory {
    protected static final Logger logger = LoggerFactory.getLogger(MutinySessionFactory.class.getName());
    /*
        To use;
             export QUARKUS_HIBERNATE_ORM_SQLSERVER_ACTIVE=true  or
             export QUARKUS_HIBERNATE_ORM_ORACLE_ACTIVE=true
     */
    @PersistenceUnit("oracle")
    InjectableInstance<Mutiny.SessionFactory> oracleFactory;

    @PersistenceUnit("sqlserver")
    InjectableInstance<Mutiny.SessionFactory> sqlserverFactory;

    public MutinySessionFactory() {
    }

    public
    InjectableInstance
      <org.hibernate.reactive.mutiny.Mutiny.SessionFactory> getSqlserverSessionFactory() {
        return sqlserverFactory;
    }

    public
    InjectableInstance
      <org.hibernate.reactive.mutiny.Mutiny.SessionFactory> getOracleSessionFactory() {
        return oracleFactory;
    }

    public static void startup(Properties properties) {
//        final BootstrapServiceRegistry bootstrapServiceRegistry =
//          new BootstrapServiceRegistryBuilder()
//            .enableAutoClose()
//            .applyIntegrator(MetadataExtractorIntegrator.INSTANCE)
//            .build();
//
//        final StandardServiceRegistry serviceRegistry =
//          new StandardServiceRegistryBuilder(bootstrapServiceRegistry)
//            .applySettings(properties)
//            .build();
    }
}

