// Package router ...
//
// Description : router ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2024-07-20 22:57
package router

import "reflect"

const (
	PrefixFuncName         = "RouterPrefix"     // 路由前缀函数名称
	MiddlewareFuncName     = "RouterMiddleware" // 路由中间件函数名称
	GinContextType         = "*gin.Context"     // gin context 类型名称
	ErrorType              = "error"            // error类型
	ErrorInterfaceFuncName = "Error"            // error接口需要实现的方法名称
)

const (
	TagNamePath         = "path"          // 接口的请求路径
	TagNameMethod       = "method"        // 接口的请求方法
	TagNameUriTag       = "tag"           // 接口的tag
	TagNameDesc         = "desc"          // 接口的描述
	TagNameOutputStrict = "output_strict" // 接口数据是否为严格模式 : 严格模式, 响应数据必须是结构体/map,非严格模式返回任意值
	TagNameBinding      = "binding"       // gin 内置的验证规则tag
	TagNameValidate     = "validate"      // validator v10 默认的验证规则tag
	TagNameErrMsg       = "err"           // 验证失败错误信息tag
)

// UriConfig 接口配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:41 2024/7/21
type UriConfig struct {
	Path           string         `json:"path"`           // 接口路由, 必须配置
	RequestMethod  string         `json:"request_method"` // 接口请求方法, 必须配置
	TagList        []string       `json:"tag_list"`       // 接口分组
	Desc           string         `json:"desc"`           // 接口描述
	OutputStrict   bool           `json:"output_strict"`  // 接口是否为严格模式 : 不配置,可返回任意类型, 配置, 必须返回结构体或者map
	FormDataType   reflect.Type   `json:"-"`              // 表单数据类型
	ResultDataType reflect.Type   `json:"-"`              // 返回值数据类型
	ApiStructValue reflect.Value  `json:"-"`              // 逻辑函数所属结构体取值
	ApiLogicFunc   reflect.Method `json:"-"`              // 自定义的接口逻辑
}

// UriParam 接口参数配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:40 2025/1/27
type UriParam struct {
	Field           string `json:"field"`             // 结构体字段
	Name            string `json:"name"`              // 参数名称
	Type            string `json:"type"`              // 参数类型
	Validate        string `json:"validate"`          // 验证规则: validator/v10 库
	ErrorMsg        string `json:"error_msg"`         // 验证失败的错误信息
	DisableAutoType bool   `json:"disable_auto_type"` // 禁用自动类型转换
	Sort            string `json:"sort"`              // 参数读取顺序: 默认 POST : body > query > path GET : query > path > body
}

const (
	FieldNameMeta = "Meta" // 元信息字段
)