package dmo.fs.db.wsnext.hib.oracle;

import dmo.fs.db.MessageUser;
import dmo.fs.db.MessageUserImpl;
import dmo.fs.db.wsnext.hib.DodexHibernateConfig;
import dmo.fs.db.wsnext.hib.sf.MutinySessionFactory;
import dmo.fs.utils.Err;
import jakarta.enterprise.inject.spi.CDI;
import org.hibernate.reactive.mutiny.Mutiny;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;
import java.security.Provider;
import java.security.Security;
import java.util.Map;
import java.util.Properties;

public class DodexDatabaseOracle implements DodexHibernateConfig, Serializable {
    private final static Logger logger = LoggerFactory.getLogger(DodexDatabaseOracle.class.getName());
    Mutiny.SessionFactory sessionFactory;

    public DodexDatabaseOracle(Map<String, String> overrideMap, Properties overrideProps) {
    }

    public DodexDatabaseOracle() {
    }

    @Override
    public void configDatabase() throws RuntimeException {
        MutinySessionFactory mutinySessionFactory =
          CDI.current().select(MutinySessionFactory.class).isUnsatisfied() ? null :
            CDI.current().select(MutinySessionFactory.class).get();

        if (mutinySessionFactory == null) {
            throw new NullPointerException(Err.displayErr(50));
        }

        sessionFactory = mutinySessionFactory.getSessionFactory();
        if (sessionFactory != null) {
            if (logger.isDebugEnabled()) {
                logger.info(Err.displayErr(51), sessionFactory);
            }
        } else {
            throw new RuntimeException(Err.displayErr(52));
        }
    }

    @Override
    public MessageUser createMessageUser() {
        return new MessageUserImpl();
    }

    @Override
    public Mutiny.SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
