package service

import (
	"testing"

	"github.com/stretchr/testify/assert"
	runtimeutil "github.com/tidbcloud/central-sdk/runtime/util"
)

const (
	smiley = "😄"
)

func TestIsValidUsername(t *testing.T) {
	firstName1 := ""
	firstName2 := "demo"
	firstName3 := runtimeutil.RandString(130)
	firstName4 := smiley
	lastName1 := ""
	lastName2 := "foo"
	lastName3 := runtimeutil.RandString(130)
	lastName4 := smiley

	assert.NotNil(t, IsValidUsername(firstName1, lastName1))
	assert.NotNil(t, IsValidUsername(firstName1, lastName2))
	assert.NotNil(t, IsValidUsername(firstName2, lastName1))
	assert.Nil(t, IsValidUsername(firstName2, lastName2))
	assert.NotNil(t, IsValidUsername(firstName2, lastName3))
	assert.NotNil(t, IsValidUsername(firstName3, lastName2))
	assert.NotNil(t, IsValidUsername(firstName3, lastName3))
	assert.NotNil(t, IsValidUsername(firstName4, lastName2))
	assert.NotNil(t, IsValidUsername(firstName2, lastName4))
}

func TestIsValidOrgName(t *testing.T) {
	orgName1 := "PingCAP.com"
	orgName2 := "PingCAP, Inc."
	orgName3 := ""
	orgName4 := runtimeutil.RandString(130)
	orgName5 := smiley

	assert.Nil(t, IsValidOrgName(orgName1))
	assert.Nil(t, IsValidOrgName(orgName2))
	assert.NotNil(t, IsValidOrgName(orgName3))
	assert.NotNil(t, IsValidOrgName(orgName4))
	assert.NotNil(t, IsValidOrgName(orgName5))
}

func TestIsValidProjectName(t *testing.T) {
	projectName1 := "PingCAP.com"
	projectName2 := "PingCAP, Inc."
	projectName3 := ""
	projectName4 := runtimeutil.RandString(130)
	projectName5 := smiley

	assert.Nil(t, IsValidOrgName(projectName1))
	assert.Nil(t, IsValidOrgName(projectName2))
	assert.NotNil(t, IsValidOrgName(projectName3))
	assert.NotNil(t, IsValidOrgName(projectName4))
	assert.NotNil(t, IsValidOrgName(projectName5))
}

func TestIsValidPhoneNumber(t *testing.T) {
	phoneNumber1 := "+1 (111) 111-1111"
	phoneNumber2 := "abc"
	phoneNumber3 := ""
	phoneNumber4 := runtimeutil.RandString(70)

	assert.Nil(t, IsValidPhoneNumber(phoneNumber1))
	assert.NotNil(t, IsValidPhoneNumber(phoneNumber2))
	assert.NotNil(t, IsValidPhoneNumber(phoneNumber3))
	assert.NotNil(t, IsValidPhoneNumber(phoneNumber4))
}
