package hib.fs.startup;

import hib.fs.db.mssql.DodexDatabaseMssql;
import hib.fs.db.ora.DodexDatabaseOracle;
import hib.fs.orm.EstablishEntityManager;
import hib.fs.utils.ColorUtilConstants;
import io.quarkus.runtime.Quarkus;
import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Locale;

@QuarkusMain(name = "dmo.fs.startup.TableGenerator")
public class TableGenerator {
    public static void main(String... args) {
        Quarkus.run(BuildTables.class, args);
    }

    public static class BuildTables implements QuarkusApplication {
        protected static final Logger logger = LoggerFactory.getLogger(TableGenerator.class.getName());

        @Override
        public int run(String... args) throws Exception {
            logger.info("\n");
            logger.info("Starting Build Tables:");
            Locale.setDefault(Locale.US);
            int returnValue = generateTables();
            if(returnValue == 0) {
                Quarkus.waitForExit();
                logger.info("Finished Build Tables:\n");
            } else {
                logger.info("{}Build Failed: DEFAULT_DB must be mssql or oracle{}\n",
                  ColorUtilConstants.RED, ColorUtilConstants.RESET);
                DodexDatabaseMssql.quit();
                System.exit(0);
            }
            return returnValue;
        }

        int generateTables() {
            EstablishEntityManager establishEntityManager = new EstablishEntityManager();
            establishEntityManager.runGenerator(null);
            String defaultDb = System.getenv("DEFAULT_DB");
            if("mssql".equals(defaultDb)) {
                DodexDatabaseMssql dodexDatabaseMssql = new DodexDatabaseMssql();
                dodexDatabaseMssql.entityManagerSetup();
                dodexDatabaseMssql.configDatabase();
            } else if("oracle".equals(defaultDb)) {
                DodexDatabaseOracle dodexDatabaseOracle = new DodexDatabaseOracle();
                dodexDatabaseOracle.entityManagerSetup();
                dodexDatabaseOracle.configDatabase();
            } else {
                return 1;
            }
            return 0;
        }
    }
}