package users

import (
	"github.com/gin-gonic/gin"
	"goskeleton/app/global/consts"
	"goskeleton/app/http/controller/web"
	"goskeleton/app/http/validator/core/data_transfer"
	"goskeleton/app/utils/response"
)

// type Update struct {
// 	// BaseField
// 	UserName string `form:"user_name" json:"user_name"  binding:"required,min=3"` // 必填、对于文本,表示它的长度>=1
// 	Pass     string `form:"pass" json:"pass" binding:"min=6"`     //  密码为 长度>=6
// 	Id
// 	// 表单参数验证结构体支持匿名结构体嵌套、以及匿名结构体与普通字段组合
// 	// RealName string `form:"real_name" json:"real_name" binding:"required,min=2"`
// 	// Phone    string `form:"phone" json:"phone" binding:"required,len=11"`
// 	// Remark   string `form:"remark" json:"remark"`
// }

// // 验证器语法，参见 Register.go文件，有详细说明

// func (u Update) CheckParams(context *gin.Context) {
// 	//1.基本的验证规则没有通过
// 	if err := context.ShouldBind(&u); err != nil {
// 		// 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可
// 		response.ValidatorError(context, err)
// 		return
// 	}

// 	//  该函数主要是将本结构体的字段（成员）按照 consts.ValidatorPrefix+ json标签对应的 键 => 值 形式绑定在上下文，便于下一步（控制器）可以直接通过 context.Get(键) 获取相关值
// 	extraAddBindDataContext := data_transfer.DataAddContext(u, consts.ValidatorPrefix, context)
// 	if extraAddBindDataContext == nil {
// 		response.ErrorSystem(context, "UserUpdate表单验证器json化失败", "")
// 	} else {
// 		// 验证完成，调用控制器,并将验证器成员(字段)递给控制器，保持上下文数据一致性
// 		(&web.Users{}).Update(extraAddBindDataContext)
// 	}
// }

type NameUpdate struct{
	UserName string `form:"user_name" json:"user_name"  binding:"required,min=3"` // 必填、对于文本,表示它的长度>=1
	Id
}
type PasswordUpdate struct{
	OldPass     string `form:"oldpass" json:"oldpass" binding:"required,min=6"`     //  密码为 长度>=6
	NewPass		string `form:"newpass" json:"newpass" binding:"required,min=6"`
	NameUpdate
}
func (n NameUpdate) CheckParams(context *gin.Context) {
	//1.基本的验证规则没有通过
	if err := context.ShouldBind(&n); err != nil {
		// 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可
		response.ValidatorError(context, err)
		return
	}

	//  该函数主要是将本结构体的字段（成员）按照 consts.ValidatorPrefix+ json标签对应的 键 => 值 形式绑定在上下文，便于下一步（控制器）可以直接通过 context.Get(键) 获取相关值
	extraAddBindDataContext := data_transfer.DataAddContext(n, consts.ValidatorPrefix, context)
	if extraAddBindDataContext == nil {
		response.ErrorSystem(context, "UserUpdate表单验证器json化失败", "")
	} else {
		// 验证完成，调用控制器,并将验证器成员(字段)递给控制器，保持上下文数据一致性
		(&web.Users{}).NameUpdate(extraAddBindDataContext)
	}
}
func (p PasswordUpdate) CheckParams(context *gin.Context) {
	//1.基本的验证规则没有通过
	if err := context.ShouldBind(&p); err != nil {
		// 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可
		response.ValidatorError(context, err)
		return
	}

	//  该函数主要是将本结构体的字段（成员）按照 consts.ValidatorPrefix+ json标签对应的 键 => 值 形式绑定在上下文，便于下一步（控制器）可以直接通过 context.Get(键) 获取相关值
	extraAddBindDataContext := data_transfer.DataAddContext(p, consts.ValidatorPrefix, context)
	if extraAddBindDataContext == nil {
		response.ErrorSystem(context, "UserUpdate表单验证器json化失败", "")
	} else {
		// 验证完成，调用控制器,并将验证器成员(字段)递给控制器，保持上下文数据一致性
		(&web.Users{}).PasswordUpdate(extraAddBindDataContext)
	}
}