package changefeed

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/dataflow-service-e2e/internal/model"
	openapi_model "github.com/tidbcloud/dataflow-service-e2e/internal/tidbcloud/dedicated/openapi/changefeed/model"
)

func TestIsEventFiltersEquals_AllowsNilAndEmptySlices(t *testing.T) {
	expected := []*openapi_model.V1beta1EventFilter{
		{
			TableMatchers:        []string{"db.*"},
			IgnoredEvents:        []string{"update"},
			IgnoredSQLStatements: nil,
		},
	}
	actual := []*openapi_model.V1beta1EventFilter{
		{
			TableMatchers:        []string{"db.*"},
			IgnoredEvents:        []string{"update"},
			IgnoredSQLStatements: []string{},
		},
	}

	assert.True(t, isEventFiltersEquals(expected, actual))
}

func TestIsEventFiltersEquals_DetectsDifferentTableMatchers(t *testing.T) {
	expected := []*openapi_model.V1beta1EventFilter{
		{
			TableMatchers: []string{"db1.*"},
		},
	}
	actual := []*openapi_model.V1beta1EventFilter{
		{
			TableMatchers: []string{"db2.*"},
		},
	}

	assert.False(t, isEventFiltersEquals(expected, actual))
}

func TestKafkaSmokeInstanceProfileForCloud(t *testing.T) {
	defaultProfile := kafkaSmokeInstanceProfileForCloud(model.AWS)
	assert.Equal(t, "2rcu", defaultProfile.changefeed1Initial)
	assert.Equal(t, "4rcu", defaultProfile.changefeed1ScaleUp)
	assert.Equal(t, "8rcu", defaultProfile.changefeed2Initial)
	assert.Equal(t, "4rcu", defaultProfile.changefeed2ScaleDown)

	gcpProfile := kafkaSmokeInstanceProfileForCloud(model.GCP)
	assert.Equal(t, "2rcu", gcpProfile.changefeed1Initial)
	assert.Equal(t, "4rcu", gcpProfile.changefeed1ScaleUp)
	assert.Equal(t, "4rcu", gcpProfile.changefeed2Initial)
	assert.Equal(t, "2rcu", gcpProfile.changefeed2ScaleDown)
}

func TestRunningCheckRetryForCloud(t *testing.T) {
	assert.Equal(t, uint(20), runningCheckRetryForCloud(model.AWS))
	assert.Equal(t, uint(40), runningCheckRetryForCloud(model.GCP))
}
