package global_client_test

import (
	"encoding/json"
	"os"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/auto-deploy/internal/constants"
	global_client "github.com/tidbcloud/auto-deploy/internal/global-client"
	"github.com/tidbcloud/auto-deploy/internal/types"
	"github.com/tidbcloud/auto-deploy/internal/utils"
)

func TestGetRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	r, err := client.GetRegionByIdViaList(global_client.DEPLOY_TYPE_DEDICATED, "ap-northeast-2-loigc1", types.AWS)
	assert.NoError(t, err)
	assert.Equal(t, "Seoul (ap-northeast-2)", r.Region.DisplayName)
}

func TestDisableRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	err := client.SetRegionState(global_client.DEPLOY_TYPE_DEDICATED, "ap-northeast-2-logic3", global_client.INACTIVE_STATE, "", types.AWS)
	assert.NoError(t, err)
}

func TestEnableRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	err := client.SetRegionState(global_client.DEPLOY_TYPE_DEDICATED, "ap-northeast-2-loigc1", global_client.ACTIVE_STATE, "", types.AWS)
	assert.NoError(t, err)
}
func TestUpdateRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	err := client.UpdateRegionInfo(global_client.DEPLOY_TYPE_DEDICATED, types.AWS, "ap-east-1-eric-1022", "", nil, []string{"2130370"})
	assert.NoError(t, err)
}
func TestDeleteRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	err := client.DeleteRegionById(global_client.DEPLOY_TYPE_DEDICATED, "ap-east-1-927", types.AWS)
	assert.NoError(t, err)
}

func TestCreateOrUpdateRegion(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	r, err := client.CreateOrUpdateRegion(global_client.DEPLOY_TYPE_DEDICATED, "ap-northeast-2", "ap-northeast-2-logic3", "https://ap-northeast-2-logic3.regional-api.dev.aws.tidbcloud.com", "", "", 2999, []string{}, []string{}, utils.Ptr(false), types.AWS)
	assert.NoError(t, err)
	assert.Equal(t, "Seoul (ap-northeast-2)", r.Region.DisplayName)
}

func TestRegisterRegionalConfigCenter(t *testing.T) {
	authKey := os.Getenv(constants.GLOBAL_AUTH_KEY_ENV)
	client := global_client.NewGlobalClient("dev", authKey, global_client.DEFAULT_TIMEOUT, true)
	err := client.NewRegionalConfigCenter("test-logical-region", "https://us-east-1-byoc-0818.regional-api.dev.aws.tidbcloud.com", true)
	assert.NoError(t, err)
	err = client.DeleteRegionalConfigCenter("test-logical-region")
	assert.NoError(t, err)
}

func TestPasrseRegponse(t *testing.T) {
	str := `
{
    "region": {
        "id": "AWS_AP_NORTHEAST_1",
        "cloudProviderId": "AWS",
        "displayName": "Tokyo (ap-northeast-1)",
        "openedTenantIds": [],
        "sortPriority": 999999,
        "area": "Asia",
        "countryCode": "JP",
        "state": "INACTIVE",
        "isPublic": true,
        "defaultBackupTime": "10:00",
        "serviceAddress": "https://ap-northeast-1-test1.regional-api.dev.aws.tidbcloud.com"
        "servicePlan": "Starter"
    },
    "deployType": "DEPLOY_TYPE_DEDICATED"
}
`
	region := global_client.Region{}
	err := json.Unmarshal([]byte(str), &region)
	assert.NoError(t, err)
	assert.Equal(t, "Tokyo (ap-northeast-1)", region.Region.DisplayName)
}
