package common

import (
	"fmt"
	"math/rand"
	"os"
	"strings"
	"testing"

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

func TestRegionLabelRule(t *testing.T) {
	var rules0 RegionLabelRules
	for i := 0; i < 10; i++ {
		id := fmt.Sprintf("keyspaces/%d", i)
		if rand.Int()%2 == 1 {
			id = fmt.Sprintf("id-%d", i)
		}
		rule := &RegionLabelRule{
			ID:       id,
			Index:    i,
			Labels:   Labels{},
			RuleType: fmt.Sprintf("%d", i),
		}
		rules0 = append(rules0, rule)
	}

	f, err := os.OpenFile("./test_region_label_rule.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
	require.NoError(t, err)
	err = rules0.WriteTo(f)
	require.NoError(t, err)
	err = f.Close()
	require.NoError(t, err)

	f, err = os.OpenFile("./test_region_label_rule.txt", os.O_RDONLY, 0666)
	require.NoError(t, err)
	var rules1 RegionLabelRules
	err = rules1.ReadFrom(f)
	require.NoError(t, err)

	require.Equal(t, rules0, rules1)
	err = f.Close()
	require.NoError(t, err)

	f, err = os.OpenFile("./test_region_label_rule.txt", os.O_RDONLY, 0666)
	require.NoError(t, err)
	rules3, err := CacheRegionLabelRules(f)
	require.NoError(t, err)

	keyspaceRegionLabel := 0
	for _, rule := range rules0 {
		fmt.Println(rule.ID)
		if strings.HasPrefix(rule.ID, "keyspaces") {
			keyspaceRegionLabel++
			id, err := GetKsIdFromRegionLabel(rule.ID)
			require.NoError(t, err)
			rule3 := rules3[id]
			require.Equal(t, rule, rule3)
		}
	}
	require.Equal(t, keyspaceRegionLabel, len(rules3))

	// remove file
	err = os.Remove("./test_region_label_rule.txt")
	require.NoError(t, err)
}
