package fileutil

import (
	"fmt"
	"reflect"
	"testing"
	log "tiloader/pkg/logutil"
)

func TestConfig(t *testing.T) {
	log.InitLog("tiloader.log", "tiloader_err.log") //待config完成后在完善

	path := "./config_test_nomal.toml"

	want := ConfigFile{
		Tiloader: Tiloader{
			LogFile:   "tiloader.log.test",
			ErrFile:   "tiloader.err.test",
			WorkerNum: 109,
			BatchSize: 1009,
			MaxError:  19,
		},
		Desc_File: Desc_File{
			DescFilePath: "./desc_file.txt.test",
			SkipLine:     109,
		},
		Tidb: Tidb{
			Host:     "127.0.0.1.test",
			Port:     40009,
			User:     "root.test",
			Password: ".test",
			Schema:   "test.test",
		},
	}
	//读取配置文件
	cfgParser := new(ConfigFileParser)
	msg, err := cfgParser.Parse(path)
	fmt.Println(msg)
	if !reflect.DeepEqual(msg, want) || err != nil {
		fmt.Println("测试不通过：", msg, want, err)
	}
}

func TestConfigDefault(t *testing.T) {
	log.InitLog("tiloader.log", "tiloader_err.log") //待config完成后在完善

	path := "./config_test.toml"

	want := ConfigFile{
		Tiloader: Tiloader{
			LogFile:   "tiloader.log",
			ErrFile:   "tiloader.err",
			WorkerNum: 10,
			BatchSize: 100,
			MaxError:  1,
		},
		Desc_File: Desc_File{
			DescFilePath: "./desc_file.txt",
			SkipLine:     10,
		},
		Tidb: Tidb{
			Host:     "127.0.0.1",
			Port:     4000,
			User:     "root",
			Password: "",
			Schema:   "test",
		},
	}
	//读取配置文件
	cfgParser := new(ConfigFileParser)
	// 这个配置，配置文件没有，预期读取配置
	msg, err := cfgParser.Parse(path)
	fmt.Println(msg)
	if !reflect.DeepEqual(msg, want) || err != nil {
		fmt.Println("测试不通过:", msg, want, err)
	}
}

func TestArgs(t *testing.T) {
	log.InitLog("tiloader.log", "tiloader_err.log") //待config完成后在完善
	cfg := NewConfig()
	// 使用案例
	// err := cfg.Parse(os.Args[1:])
	// err := cfg.Parse(argsTest)
	// switch err {
	// case nil:
	// case flag.ErrHelp:
	// 	os.Exit(0)
	// default:
	// 	fmt.Println("parse cmd flags error.", err)
	// 	os.Exit(2)
	// }
	// 测试正常传参数
	argsTest := []string{"-config=config_test_nomal.toml"}
	err := cfg.Parse(argsTest)
	if err != nil {
		fmt.Println("测试不通过: err ", err)
	} else {
		fmt.Println("测试通过，有入参：", argsTest)
	}

	// 测试空值传参
	argsTestEmpty := []string{"-config="}
	err1 := cfg.Parse(argsTestEmpty)
	want1 := "-config must not be empty"
	if err1.Error() == want1 {
		fmt.Println("测试通过:", err1.Error())
	} else {
		fmt.Println("测试不通过: ", err1.Error())
	}
	// 测试不传参 -config，传送一个异常参数
	argsTestNil := []string{"-c"}
	err2 := cfg.Parse(argsTestNil)
	want2 := "flag provided but not defined: -c"
	if err2.Error() == want2 {
		fmt.Println("测试通过:", err2.Error())
	} else {
		fmt.Println("测试不通过:", err2.Error())
	}
}
