package regionalserver

import (
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/pkg/config"
)

func TestNewRegionalServerCli_SetPasswordTimeoutDefault(t *testing.T) {
	// SetPasswordTimeoutInSec unset -> fall back to defaultSetPasswordTimeout.
	cfg := &config.Config{
		RegionalServerConfig: config.RegionalServerConfig{
			RequestTimeoutInSec:   30,
			RetryCount:            3,
			RetryWaitTimeoutInSec: 1,
		},
	}

	cli, ok := NewRegionalServerCli(cfg).(*regionalServerCliImpl)
	require.True(t, ok)
	assert.Equal(t, 30*time.Second, cli.client.GetClient().Timeout)
	assert.Equal(t, defaultSetPasswordTimeout, cli.setPasswordClient.GetClient().Timeout,
		"SetPasswordTimeoutInSec unset should default to %v", defaultSetPasswordTimeout)
}

func TestNewRegionalServerCli_SetPasswordTimeoutOverride(t *testing.T) {
	// Explicit SetPasswordTimeoutInSec should be honored.
	cfg := &config.Config{
		RegionalServerConfig: config.RegionalServerConfig{
			RequestTimeoutInSec:     30,
			RetryCount:              3,
			RetryWaitTimeoutInSec:   1,
			SetPasswordTimeoutInSec: 90,
		},
	}

	cli, ok := NewRegionalServerCli(cfg).(*regionalServerCliImpl)
	require.True(t, ok)
	assert.Equal(t, 30*time.Second, cli.client.GetClient().Timeout)
	assert.Equal(t, 90*time.Second, cli.setPasswordClient.GetClient().Timeout)
}

func TestNewRegionalServerCli_SetPasswordTimeoutNegative_UsesDefault(t *testing.T) {
	// A non-positive value is treated as unset.
	cfg := &config.Config{
		RegionalServerConfig: config.RegionalServerConfig{
			RequestTimeoutInSec:     30,
			RetryCount:              3,
			RetryWaitTimeoutInSec:   1,
			SetPasswordTimeoutInSec: -1,
		},
	}

	cli, ok := NewRegionalServerCli(cfg).(*regionalServerCliImpl)
	require.True(t, ok)
	assert.Equal(t, defaultSetPasswordTimeout, cli.setPasswordClient.GetClient().Timeout)
}
