package com.codebyte.api.config.ssl;

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import java.security.cert.X509Certificate;
import java.time.Instant;
import java.time.temporal.ChronoUnit;

/** Publishes {@code ssl.certificate.expiry.days} — the minimum days-to-expiry across the chain. */
public class SslMetrics {

    public SslMetrics(PemSslMaterial material, MeterRegistry registry) {
        Gauge.builder("ssl.certificate.expiry.days", material, SslMetrics::minDaysToExpiry)
                .description("Minimum days until any served certificate expires")
                .register(registry);
    }

    private static double minDaysToExpiry(PemSslMaterial material) {
        Instant now = Instant.now();
        long min = Long.MAX_VALUE;
        for (X509Certificate cert : material.chain()) {
            min = Math.min(min, ChronoUnit.DAYS.between(now, cert.getNotAfter().toInstant()));
        }
        return min;
    }
}
