package validate

import (
	"fmt"
	"github.com/go-playground/locales/zh"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zh_translations "github.com/go-playground/validator/v10/translations/zh"
	"reflect"
)

func Struct(s interface{}) (errMsg []string, err error) {
	// 创建验证器实例
	validate := validator.New()

	// 创建中文翻译器
	zh_ch := zh.New()
	uni := ut.New(zh_ch, zh_ch)
	trans, _ := uni.GetTranslator("zh")

	//注册一个函数，获取struct tag里自定义的label作为字段名
	validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
		name := fld.Tag.Get("label")
		return name
	})

	// 注册中文翻译器到验证器
	_ = zh_translations.RegisterDefaultTranslations(validate, trans)

	// 验证结构体
	err = validate.Struct(s)
	if err != nil {
		// 处理验证错误
		if _, ok := err.(*validator.InvalidValidationError); ok {
			fmt.Println("处理验证错误error:", err)
			errMsg = append(errMsg, err.Error())
		} else {
			for _, v := range err.(validator.ValidationErrors) {
				errMsg = append(errMsg, v.Translate(trans))
			}
		}
	}

	return
}
