package container

import (
	"testing"

	"github.com/stretchr/testify/require"
	service_config "github.com/tidbcloud/dataflow-service-ng/internal/config"
)

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

	client, err := newDataPipelineLakeClient(service_config.DataPipelineConfig{})
	require.NoError(t, err)
	require.Nil(t, client)
}

// Half a configuration is not a configuration. Either half missing has to
// leave the client absent rather than build one that fails on first use.
func TestNewDataPipelineLakeClientNeedsBothHalves(t *testing.T) {
	t.Parallel()

	for name, cfg := range map[string]service_config.DataPipelineConfig{
		"base URL without secret": {LakeBaseURL: "https://lake.example.test"},
		"secret without base URL": {LakeHMACSecret: "test-hmac-secret"},
		"blank secret":            {LakeBaseURL: "https://lake.example.test", LakeHMACSecret: "   "},
	} {
		t.Run(name, func(t *testing.T) {
			t.Parallel()
			client, err := newDataPipelineLakeClient(cfg)
			require.NoError(t, err)
			require.Nil(t, client)
		})
	}
}

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

	client, err := newDataPipelineLakeClient(service_config.DataPipelineConfig{
		LakeBaseURL:    "  https://lake.example.test/  ",
		LakeHMACSecret: "test-hmac-secret",
	})
	require.NoError(t, err)
	require.NotNil(t, client)
}

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

	client, err := newDataPipelineLakeClient(service_config.DataPipelineConfig{
		LakeBaseURL:    "https://lake.example.test",
		LakeHMACSecret: "test-hmac-secret",
	})
	require.NoError(t, err)
	require.NotNil(t, client)
}
