package provider

import (
	"testing"

	"github.com/stretchr/testify/require"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
)

func TestAWSReplayDefaults(t *testing.T) {
	replay := &cloudv1.Replay{
		Spec: cloudv1.ReplaySpec{
			Kubernetes: cloudv1.Kubernetes{
				Cloud: cloudv1.Cloud{
					AWS: &cloudv1.CloudAWS{
						SubnetGroups: cloudv1.AWSSubnetGroups{
							{
								Name: cloudv1.AWSSubnetGroupNodes,
								Subnets: []cloudv1.AWSSubnet{
									{SubnetID: "subnet-node-1", Zone: "us-west-2a"},
								},
							},
							{
								Name: cloudv1.AWSSubnetGroupSecondaryCIDR,
								Subnets: []cloudv1.AWSSubnet{
									{SubnetID: "subnet-secondary-1", Zone: "us-west-2b"},
								},
							},
							{
								Name: cloudv1.AWSSubnetGroupName("public"),
								Subnets: []cloudv1.AWSSubnet{
									{SubnetID: "subnet-public-1", Zone: "us-west-2c"},
								},
							},
						},
					},
				},
			},
		},
	}

	defaults := deriveAWSReplayDefaults(replay)
	require.Equal(t, []string{"us-west-2a", "us-west-2b"}, defaults.zones)
	require.Equal(t, []string{"subnet-node-1", "subnet-secondary-1"}, defaults.subnets)
}

func TestAWSReplayDefaultsNilReplay(t *testing.T) {
	defaults := deriveAWSReplayDefaults(nil)
	require.Nil(t, defaults.zones)
	require.Nil(t, defaults.subnets)
}

func TestACKReplayDefaults(t *testing.T) {
	replay := &cloudv1.Replay{
		Spec: cloudv1.ReplaySpec{
			Kubernetes: cloudv1.Kubernetes{
				Cloud: cloudv1.Cloud{
					Ack: &cloudv1.CloudAck{
						Subnets: []string{"vsw-a", "vsw-b"},
					},
				},
			},
		},
	}

	defaults := deriveACKReplayDefaults(replay)
	require.Equal(t, []string{"vsw-a", "vsw-b"}, defaults.subnets)
}

func TestACKReplayDefaultsNilReplay(t *testing.T) {
	require.Nil(t, deriveACKReplayDefaults(nil).subnets)
}
