package config

import (
	"encoding/csv"
	"os"
	"strings"
	"testing"

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

func TestLoadBetaRuleSpec(t *testing.T) {
	assert := require.New(t)

	rs, err := LoadBetaRuleSpec()
	assert.Nil(err)
	assert.NotEmpty(rs.Rule)
	assert.Equal("Region 无法分裂", rs.Rule[0].Symptom)
	assert.Equal("https://kb.pingcap.com/post/solutions/77", rs.Rule[0].KB[0])
	assert.Equal("tikv", rs.Rule[0].Patterns.Component)
	assert.Equal("error", rs.Rule[0].Patterns.Level)
	assert.Equal("failed to handle split req", rs.Rule[0].Patterns.Message[0])
}

func TestDumpRuleAsCSV(t *testing.T) {
	assert := require.New(t)

	rs, err := LoadBetaRuleSpec()
	assert.Nil(err)

	records := [][]string{{
		"输出症状", "关联 KB", "关联 Jira", "组件", "日志级别", "日志匹配正则",
	}}
	for _, rule := range rs.Rule {
		records = append(records, []string{
			rule.Symptom,
			strings.Join(rule.KB, ","),
			strings.Join(rule.Jira, ","),
			rule.Patterns.Component,
			rule.Patterns.Level,
			".*" + strings.Join(rule.Patterns.Message, ".*") + ".*",
		})
	}

	w := csv.NewWriter(os.Stdout)
	for _, record := range records {
		if err := w.Write(record); err != nil {
			panic(err)
		}
	}
	w.Flush()

	if err := w.Error(); err != nil {
		panic(err)
	}
}
