package de.effigenix.infrastructure.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

import java.sql.DriverManager;

/**
 * Prüft vor dem Context-Start, ob die Datenbank erreichbar ist.
 * Schlägt die Verbindung fehl, wird das Spring-Profil "no-db" aktiviert.
 * Damit werden JPA, DataSource und Liquibase ausgeschlossen und Stub-Beans registriert.
 */
public class DatabaseProfileInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    private static final Logger log = LoggerFactory.getLogger(DatabaseProfileInitializer.class);

    @Override
    public void initialize(ConfigurableApplicationContext ctx) {
        var env = ctx.getEnvironment();
        var url  = env.getProperty("spring.datasource.url",      "jdbc:postgresql://localhost:5432/effigenix");
        var user = env.getProperty("spring.datasource.username", "effigenix");
        var pass = env.getProperty("spring.datasource.password", "effigenix");

        try (var ignored = DriverManager.getConnection(url, user, pass)) {
            log.debug("Datenbankverbindung erfolgreich – normaler Start.");
        } catch (Exception e) {
            log.warn("⚠️  Keine Datenbankverbindung – Stub-Modus aktiv. Einige Features sind nicht verfügbar. ({})", e.getMessage());
            ((ConfigurableEnvironment) env).addActiveProfile("no-db");
        }
    }
}
