package study.orderflow.config;

import javax.sql.DataSource;

import org.springframework.boot.health.contributor.Health;
import org.springframework.boot.health.contributor.HealthIndicator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

/// 就绪探针（O02）：数据库不可用时 readiness=DOWN，
/// 平台不应把流量切进来；liveness 不依赖数据库。
@Component
public class DbReadyIndicator implements HealthIndicator {

    private final JdbcTemplate jdbc;

    public DbReadyIndicator(DataSource dataSource) {
        this.jdbc = new JdbcTemplate(dataSource);
    }

    @Override
    public Health health() {
        try {
            jdbc.execute((java.sql.Connection connection) -> null);
            return Health.up().withDetail("db", "select-1-ok").build();
        } catch (Exception ex) {
            return Health.down(new IllegalStateException("db_unavailable")).build();
        }
    }
}
