package validation

import (
	"fmt"
	"github.com/go-playground/locales/en"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	et "github.com/go-playground/validator/v10/translations/en"
)

func Validate(object interface{}) (errs []string){
	validate, trans := getValidator()
	err := validate.Struct(object)
	return translateError(err, trans)
}

func translateError(err error, trans *ut.Translator) (errs []string) {
	if err == nil {
		return nil
	}
	validatorErrs := err.(validator.ValidationErrors)
	for _, e := range validatorErrs {
		translatedErr := fmt.Errorf(e.Translate(*trans)).Error()
		errs = append(errs, translatedErr)
	}
	return errs
}

func getValidator() (*validator.Validate, *ut.Translator) {
	validate := validator.New()
	english := en.New()
	trans, _ := ut.New(english, english).GetTranslator("en")
	_ = et.RegisterDefaultTranslations(validate, trans)
	return validate, &trans
}