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 Logout struct {
	// 表单参数验证结构体支持匿名结构体嵌套、以及匿名结构体与普通字段组合
	// UserName string `form:"user_name" json:"user_name"  binding:"required,min=3"`
	Id
}

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

func (l Logout) CheckParams(context *gin.Context) {

	if err := context.ShouldBind(&l); err != nil {
		// 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可
		response.ValidatorError(context, err)
		return
	}

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

		// 以下代码为模拟 前置、后置函数的回调代码
		/*
			func(before_callback_fn func(context *gin.Context) bool, after_callback_fn func(context *gin.Context)) {
				if before_callback_fn(extraAddBindDataContext) {
					defer after_callback_fn(extraAddBindDataContext)
					(&Web.Users{}).Destroy(extraAddBindDataContext)
				} else {
					// 这里编写前置函数验证不通过的相关返回提示逻辑...

				}
			}((&Users.DestroyBefore{}).Before, (&Users.DestroyAfter{}).After)
		*/
	}
}
