package billingcli

import (
	"testing"
	"time"
)

func TestIsNonExpiredStripeCard(t *testing.T) {
	now := time.Date(2026, 5, 9, 0, 0, 0, 0, time.UTC)
	tests := []struct {
		name string
		card *StripeCard
		want bool
	}{
		{name: "nil", card: nil, want: false},
		{name: "future_month", card: &StripeCard{ExpMonth: "6", ExpYear: "2026"}, want: true},
		{name: "same_month", card: &StripeCard{ExpMonth: "5", ExpYear: "2026"}, want: true},
		{name: "past_month", card: &StripeCard{ExpMonth: "4", ExpYear: "2026"}, want: false},
		{name: "past_year", card: &StripeCard{ExpMonth: "12", ExpYear: "2025"}, want: false},
		{name: "future_year", card: &StripeCard{ExpMonth: "1", ExpYear: "2027"}, want: true},
		{name: "invalid_month", card: &StripeCard{ExpMonth: "13", ExpYear: "2027"}, want: false},
		{name: "invalid_year", card: &StripeCard{ExpMonth: "1", ExpYear: "bad"}, want: false},
		{name: "trim_spaces", card: &StripeCard{ExpMonth: " 5 ", ExpYear: " 2026 "}, want: true},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := IsNonExpiredStripeCard(tt.card, now); got != tt.want {
				t.Fatalf("IsNonExpiredStripeCard() = %v, want %v", got, tt.want)
			}
		})
	}
}
