package model

import (
	"fmt"
	"github.com/fonchain_enterprise/micro-account/api/account"
	"github.com/fonchain_enterprise/micro-account/pkg/common/utils"
	"github.com/fonchain_enterprise/micro-account/pkg/infrsatructure/external"
	"github.com/fonchain_enterprise/micro-account/pkg/m"
	"testing"
	"time"
)

func TestDomainCount(t *testing.T) {

}

func TestSynMailAccount(t *testing.T) {

	//数据库
	mysqlConfig := MysqlConfig{
		Db:         "mysql",
		DbHost:     "rm-bp176edrl1g6kcycblo.mysql.rds.aliyuncs.com",
		DbPort:     "3306",
		DbUser:     "fonchain_opv",
		DbPassWord: "IhQmhg8HZjDmU=Ove5PnA^D",
		DbName:     "fontree-account",
	}

	LoadEnv(mysqlConfig)

	external.LoadEnv("postmaster@fontree.cn", "Zaq12wsx", "fontree.cn", true)

	var users []User
	domain := m.DefaultDomain
	DB.Model(&User{}).Where(&User{Domain: &domain}).Where("isNull(mail_account) and id >50 ").Where("status != 'left'").Limit(100).Find(&users)
	fmt.Println(users)
	if len(users) <= 0 {
		return
	}
	for _, user := range users {

		var englishName, mailAccount, mailAccountPrefix string
		var num int64
		if utils.HasEnglishAndChinese(user.Nickname) {
			return
		}

		englishName = user.Nickname
		if utils.HasChinese(user.Nickname) {
			englishName = GetEnglishNameByName(user.Nickname)
		}

		DB.Model(&User{}).Unscoped().Preload("DeletedAt").Where(&User{Domain: user.Domain, EnglishName: englishName}).Count(&num)

		if num >= 1 {
			mailAccount = fmt.Sprintf("%s%02d@%s", englishName, num+1, m.MailDomain)
			mailAccountPrefix = fmt.Sprintf("%s%02d", englishName, num+1)
		} else {
			mailAccount = fmt.Sprintf("%s@%s", englishName, m.MailDomain)
			mailAccountPrefix = fmt.Sprintf("%s", englishName)

		}

		err := external.ReadMail.CreateMailAccount(external.CreateAccountInfo{Username: mailAccountPrefix, Password: "Aa.123456", Cn: user.Nickname})

		if err != nil {

			fmt.Println("2------", err)
			return
		}

		if err := DB.Model(&User{}).Where(&User{ID: uint(user.ID)}).UpdateColumns(&User{MailAccount: mailAccount, EnglishName: englishName}).Error; err != nil {
			fmt.Println("1------", err)
			return
		}

		fmt.Println("设置成功一个", user.Nickname)
		time.Sleep(1 * time.Second)
	}

}

func TestGetMemCry(t *testing.T) {

	user := &User{
		ID:            153,
		MnemonicWords: "bbX/2x+VK1zMX/oETDqPyw67Sj16H2ex8J8+tp7gFoSVUpL1UXLAJbqcURigOOZU",
	}

	fmt.Println(user.GetMemCry())

}

func TestNick(t *testing.T) {

	fmt.Println(SendPhoneNum["13788998899"])

	if _, ok := SendPhoneNum["13788998899"]; ok {
		fmt.Println("1-----", SendPhoneNum["13788998899"])
	}

}

func TestGetEnglishNameByName(t *testing.T) {
	type args struct {
		nickName string
	}
	tests := []struct {
		name string
		args args
		want string
	}{
		{args: args{nickName: "阿丽米罕·色依提"}},
		// TODO: Add test cases.
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := GetEnglishNameByName(tt.args.nickName); got != tt.want {
				t.Errorf("GetEnglishNameByName() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestUser_recordTrainVideo(t *testing.T) {
	//数据库
	mysqlConfig := MysqlConfig{
		Db:         "mysql",
		DbHost:     "172.16.100.93",
		DbPort:     "9061",
		DbUser:     "root",
		DbPassWord: "123456",
		DbName:     "fontree-account",
	}
	//http://172.16.100.93:9010/salebot
	LoadEnv(mysqlConfig)

	external.LoadEnv("postmaster@fontree.cn", "Zaq12wsx", "fontree.cn", true)

	var user *User
	domain := m.DefaultDomain
	DB.Model(&User{}).Where(&User{Domain: &domain, ID: 40}).Find(&user)

	var trains []*account.TrainVideo
	trains = append(trains, &account.TrainVideo{TrainUUID: "1", TrainDesc: "111--", Video: "x111x"})
	trains = append(trains, &account.TrainVideo{TrainUUID: "2", TrainDesc: "2--", Video: "x2x"})
	trains = append(trains, &account.TrainVideo{TrainUUID: "4", TrainDesc: "4--", Video: "x4x"})

	err := user.recordTrainVideo(trains)
	fmt.Println("err", err)
}

func TestSynTrainVideo(t *testing.T) {

	//数据库
	mysqlConfig := MysqlConfig{
		Db:         "mysql",
		DbHost:     "172.16.100.93",
		DbPort:     "9061",
		DbUser:     "root",
		DbPassWord: "123456",
		DbName:     "fontree-account",
	}

	LoadEnv(mysqlConfig)

	var users []User
	domain := m.DefaultDomain
	DB.Model(&User{}).Where(&User{Domain: &domain}).Where("train  != ''").Limit(1000).Find(&users)
	//fmt.Println(users)
	if len(users) <= 0 {
		return
	}

	fmt.Println(len(users))
	for _, t1 := range users {
		var trains []*account.TrainVideo
		trains = append(trains, &account.TrainVideo{TrainUUID: "1", TrainDesc: "市场培训", Video: t1.Train})

		err := t1.recordTrainVideo(trains)
		if err != nil {
			fmt.Println(t1.ID, err)
		}
	}

}