package dapi

import (
	"github.com/go-playground/validator/v10"
	"reflect"
	"strings"
)

type ValidError struct {
	Key     string
	Message string
}

type ValidErrors []*ValidError

func (v *ValidError) Error() string {
	return v.Message
}

func (v ValidErrors) Error() string {
	return strings.Join(v.Errors(), ",")
}

func (v ValidErrors) Errors() []string {
	var errs []string
	for _, err := range v {
		errs = append(errs, err.Error())
	}

	return errs
}

func ValidateField(usr interface{}, f func(typeOfCat reflect.Type, fieldName string)) {

	validate := validator.New()
	typeOfCat := reflect.TypeOf(usr)
	if typeOfCat.Kind() == reflect.Ptr {
		//err = err.Elem
		typeOfCat = typeOfCat.Elem()
	}
	err := validate.Struct(usr)
	if err != nil {
		for _, err := range err.(validator.ValidationErrors) {
			fieldName := err.Field() //获取是哪个字段不合乎格局
			f(typeOfCat, fieldName)
		}
	}
}