package model

import (
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/pov-service/internal/common/constant"
)

func TestWorkloadParamsGetClusterType_DefaultsAndOverrides(t *testing.T) {
	t.Parallel()

	var empty WorkloadParams
	clusterType, err := empty.GetClusterType()
	require.NoError(t, err)
	require.Equal(t, ClusterTypeTiDBCloudPremium, clusterType)

	params := WorkloadParams{
		{
			Name:  string(constant.ClusterType),
			Value: string(ClusterTypeTiDBCloudEssential),
		},
	}

	clusterType, err = params.GetClusterType()
	require.NoError(t, err)
	require.Equal(t, ClusterTypeTiDBCloudEssential, clusterType)

	params[0].Value = "unknown-type"
	_, err = params.GetClusterType()
	require.Error(t, err)
}

func TestWorkloadParamsGetPrepareParams(t *testing.T) {
	t.Parallel()

	original := WorkloadParams{
		{Name: "prepare_method", Value: "sql_generate"},
		{Name: "prepare_warehouses", Value: "100"},
		{Name: string(constant.BrStorageURL), Value: "s3://foo"},
		{Name: "workload_name", Value: "tpcc"},
	}

	paramsCopy := make(WorkloadParams, len(original))
	copy(paramsCopy, original)

	result := paramsCopy.GetPrepareParams()

	require.Contains(t, result, WorkloadParam{Name: "prepare_method", Value: "sql_generate"})
	require.Contains(t, result, WorkloadParam{Name: "warehouses", Value: "100"})
	require.Contains(t, result, WorkloadParam{Name: "storage_url", Value: "s3://foo"})
	require.Contains(t, result, WorkloadParam{Name: "s3_endpoint", Value: "https://qa-workload-datasets.s3.us-west-2.amazonaws.com"})

	// Ensure the original slice has not been mutated.
	require.Equal(t, original, paramsCopy)
}
