package provider

import (
	"testing"
	"time"

	"github.com/aws/aws-sdk-go-v2/aws"
	ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
	"github.com/stretchr/testify/require"

	calent "github.com/tidbcloud/devops/entity/k8scalendar"
)

func TestMapEKSClusterVersion(t *testing.T) {
	release := time.Date(2024, 9, 25, 0, 0, 0, 0, time.UTC)
	endStd := time.Date(2025, 11, 25, 0, 0, 0, 0, time.UTC)
	endExt := time.Date(2026, 11, 25, 0, 0, 0, 0, time.UTC)
	scraped := time.Date(2026, 5, 25, 12, 0, 0, 0, time.UTC)

	v := mapEKSClusterVersion(ekstypes.ClusterVersionInformation{
		ClusterType:              aws.String("eks"),
		ClusterVersion:           aws.String("1.31"),
		ReleaseDate:              &release,
		EndOfStandardSupportDate: &endStd,
		EndOfExtendedSupportDate: &endExt,
	}, scraped)

	require.NotNil(t, v)
	require.Equal(t, calent.CloudEKS, v.Cloud)
	require.Equal(t, "1.31", v.Version)
	require.Equal(t, "aws", v.CloudProvider)
	require.Equal(t, release, v.LifecycleStart)
	require.Equal(t, endStd, v.EndOfStandardSupport)
	require.NotNil(t, v.EndOfExtendedSupport)
	require.Equal(t, endExt, *v.EndOfExtendedSupport)
	require.Empty(t, v.SourceURL)
	require.NotEmpty(t, v.Fingerprint)
}

func TestMapEKSClusterVersionSkipsNonEKS(t *testing.T) {
	release := time.Date(2024, 9, 25, 0, 0, 0, 0, time.UTC)
	endStd := time.Date(2025, 11, 25, 0, 0, 0, 0, time.UTC)
	v := mapEKSClusterVersion(ekstypes.ClusterVersionInformation{
		ClusterType:              aws.String("fargate"),
		ClusterVersion:           aws.String("1.31"),
		ReleaseDate:              &release,
		EndOfStandardSupportDate: &endStd,
	}, time.Now().UTC())
	require.Nil(t, v)
}
