package infrastructure.healthcheck;

import jakarta.enterprise.context.ApplicationScoped;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Startup;

/**
 * Startup Check: Verifica que el contexto de la aplicación (CDI)
 * se ha inicializado correctamente y las configuraciones básicas están disponibles.
 * Este chequeo le dice a Kubernetes "El arranque interno finalizó",
 * permitiendo que los chequeos de Liveness y Readiness tomen el control.
 */
@Slf4j
@Startup
@ApplicationScoped
public class ApplicationStartupCheck implements HealthCheck {

    private final String applicationName;

    public ApplicationStartupCheck(
            @ConfigProperty(name = "quarkus.application.name", defaultValue = "api-application") String applicationName) {
        this.applicationName = applicationName;
    }

    @Override
    public HealthCheckResponse call() {
        log.info("Ejecutando startup health check para {}...", applicationName);

        return HealthCheckResponse.named("Application Startup")
                .up()
                .withData("application", applicationName)
                .withData("status", "Contexto de aplicación (CDI) iniciado.")
                .build();
    }
}