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

import "github.com/getkin/kin-openapi/openapi3"

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"          // 接口的描述
	TagNameIsSse        = "is-sse"        // 是否 SSE 连接
	TagNameIsWebsocket  = "is-ws"         // 是否 websocket 连接
	TagNameOutputStrict = "output_strict" // 接口数据是否为严格模式 : 严格模式, 响应数据必须是结构体/map，非严格模式返回任意值
	TagNameHookSync     = "hook-sync"     // hook 同步执行
	TagNameNoLogin      = "no-login"      // 接口是否需要登录(无需登录, 则有token就验证, 无token不验证)
	TagNameMaxExecTime  = "max-exec-time" // 接口最大执行时间, 单位: s, 配置为0则不验证
	TagNameRateLimit    = "rate-limit"    // 接口限流
	TagNameBinding      = "binding"       // gin 内置的验证规则tag
	TagNameValidate     = "validate"      // validator v10 默认的验证规则tag
	TagNameErrMsg       = "err"           // 验证失败错误信息 tag
)

// UriParam 接口参数配置
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" // 元信息字段
)

// DocConfig 文档配置
type DocConfig struct {
	Enable          bool                      `json:"enable" toml:"enable" yaml:"enable" dc:"是否启用文档"`
	UiTheme         string                    `json:"ui_theme" toml:"ui_theme" yaml:"ui_theme" dc:"文档主题"`
	BaseUri         string                    `json:"base_uri" toml:"base_uri" yaml:"base_uri" dc:"文档基础Uri"`
	Flag            string                    `json:"flag" toml:"flag" yaml:"flag" dc:"文档标识"`
	ServerList      *openapi3.Servers         `json:"server_list" toml:"server_list" yaml:"server_list" dc:"服务环境列表"`
	Info            *openapi3.Info            `json:"info" toml:"info" yaml:"info" dc:"基础信息"`
	SecuritySchemes *openapi3.SecuritySchemes `json:"security_schemes" toml:"security_schemes" yaml:"security_schemes" dc:"服务安全策略"`
	CommonParameter *openapi3.ParametersMap   `json:"common_parameter" toml:"common_parameter" yaml:"common_parameter" dc:"基础公共参数"`
}
