package collector

import (
	"crypto/tls"
	"crypto/x509"
	"testing"
	"time"
)

// TLS 연결 상태에서 리프 인증서의 만료까지 남은 일수를 계산한다.
func TestCertDaysLeft(t *testing.T) {
	now := time.Date(2026, 7, 7, 12, 0, 0, 0, time.UTC)

	state := &tls.ConnectionState{
		PeerCertificates: []*x509.Certificate{
			{NotAfter: now.Add(30*24*time.Hour + time.Hour)}, // 30일 + 1시간 뒤 만료
		},
	}
	days, ok := certDaysLeft(state, now)
	if !ok {
		t.Fatal("인증서가 있으면 ok=true 기대")
	}
	if days != 30 {
		t.Errorf("30일 기대, got %d", days)
	}

	// 이미 만료된 인증서는 음수 일수
	expired := &tls.ConnectionState{
		PeerCertificates: []*x509.Certificate{
			{NotAfter: now.Add(-48 * time.Hour)},
		},
	}
	days, ok = certDaysLeft(expired, now)
	if !ok || days != -2 {
		t.Errorf("만료 인증서는 -2일 기대, got %d (ok=%v)", days, ok)
	}

	// TLS가 아니거나(state=nil) 인증서가 없으면 ok=false
	if _, ok := certDaysLeft(nil, now); ok {
		t.Error("nil state는 ok=false 기대")
	}
	if _, ok := certDaysLeft(&tls.ConnectionState{}, now); ok {
		t.Error("인증서 없는 state는 ok=false 기대")
	}
}
