package no.valg.valgnatt.common;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class StartupServletContextListener implements ServletContextListener {

    private static final Logger LOG = LogManager.getLogger(StartupServletContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        String delayAtStartup = servletContext.getInitParameter("delayAtStartup");
        long i = delayAtStartup == null ? 0 : Integer.parseInt(delayAtStartup);
        if (i > 0) {
            try {
                // Workaround for https://github.com/flyway/flyway/issues/1014
                // Flyway klarer ikke å samkjøre at 3 forskjellige servere starter opp
                // samtidig og *samtidig* skal migrere/oppdatere databasen til siste
                // versjon. Derfor må vi la 2 av 3 servere henge litt (5s) før
                // de også starter (sjekk delay i web.xml).
                Thread.sleep(i);
            } catch (InterruptedException e) {
                // Nothing
            }
        }
        Properties properties = new Properties();
        InputStream is = StartupServletContextListener.class.getResourceAsStream("/version.properties");
        if (is != null) {
            try {
                properties.load(is);
            } catch (IOException e) {
                throw new ValgnattException(e);
            }
        }
        LOG.info("Starting " + servletContext.getServletContextName()
                + " version " + properties.getProperty("version_full")
                + " compiled at " + properties.getProperty("build_time")
                + " from branch " + properties.getProperty("git_branch")
                + " at revision " + properties.getProperty("git_short_hash"));
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        // Har ikke noe spesielt som må avsluttes eksplisitt av appserver-kontainer - avslutninger ser ikke ut til å henge
    }

}
