package dto

import "time"

// SaveWeComApplicationRequest 保存企业微信自建应用请求。
type SaveWeComApplicationRequest struct {
	CorpID         string `json:"corp_id" validate:"required,min=1,max=64" description:"企业微信企业 ID"`
	AgentID        int64  `json:"agent_id" validate:"required,gt=0" description:"企业微信自建应用 AgentID"`
	Name           string `json:"name" validate:"required,min=1,max=100" description:"应用展示名称"`
	Secret         string `json:"secret" validate:"required,min=1,max=512" description:"应用 Secret，管理端使用明文传入，服务端加密保存"`
	CallbackToken  string `json:"callback_token" validate:"required,min=1,max=512" description:"回调 Token，管理端使用明文传入，服务端加密保存"`
	EncodingAESKey string `json:"encoding_aes_key" validate:"required,len=43" description:"回调 EncodingAESKey，管理端使用明文传入，服务端加密保存"`
	Status         int    `json:"status" validate:"oneof=0 1" enum:"0,1" description:"状态 (0:禁用, 1:启用)"`
}

// WeComApplicationListRequest 查询企业微信应用配置列表请求。
type WeComApplicationListRequest struct {
	Page     int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" default:"1" description:"页码，默认 1"`
	PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" default:"20" description:"每页数量，默认 20，最大 100"`
}

// WeComApplicationResponse 企业微信应用配置响应，仅允许超级管理员读取明文凭据。
type WeComApplicationResponse struct {
	ID                   uint       `json:"id" description:"应用配置 ID"`
	CorpID               string     `json:"corp_id" description:"企业微信企业 ID"`
	AgentID              int64      `json:"agent_id" description:"企业微信自建应用 AgentID"`
	Name                 string     `json:"name" description:"应用展示名称"`
	Secret               string     `json:"secret" description:"应用 Secret 明文，仅超级管理员可见"`
	CallbackToken        string     `json:"callback_token" description:"回调 Token 明文，仅超级管理员可见"`
	EncodingAESKey       string     `json:"encoding_aes_key" description:"回调 EncodingAESKey 明文，仅超级管理员可见"`
	DefaultCreatorUserID string     `json:"default_creator_userid" description:"代理等非企微账号发起审批时使用的默认企微成员 userid"`
	DefaultCreatorName   string     `json:"default_creator_name" description:"默认企微审批发起人姓名快照"`
	Status               int        `json:"status" description:"状态 (0:禁用, 1:启用)"`
	StatusName           string     `json:"status_name" description:"状态名称（中文）"`
	CredentialsSet       bool       `json:"credentials_set" description:"Secret、回调 Token 和 EncodingAESKey 是否均已配置"`
	LastConnectedAt      *time.Time `json:"last_connected_at" description:"最近一次成功取得 access_token 的时间"`
	CreatedAt            time.Time  `json:"created_at" description:"创建时间"`
	UpdatedAt            time.Time  `json:"updated_at" description:"更新时间"`
}

// SaveWeComDefaultCreatorRequest 保存企业微信应用默认审批发起人请求。
type SaveWeComDefaultCreatorRequest struct {
	UserID string `json:"userid" validate:"required,min=1,max=64" description:"从应用当前可见成员中选择的默认发起人 userid"`
}

// SaveWeComDefaultCreatorParams 保存默认审批发起人的路径与请求参数。
type SaveWeComDefaultCreatorParams struct {
	ID uint `path:"id" required:"true" description:"企业微信应用配置 ID"`
	SaveWeComDefaultCreatorRequest
}

// WeComApplicationListResponse 企业微信应用列表响应。
type WeComApplicationListResponse struct {
	Items    []WeComApplicationResponse `json:"items" description:"企业微信应用配置列表"`
	Total    int64                      `json:"total" description:"总数量"`
	Page     int                        `json:"page" description:"当前页码"`
	PageSize int                        `json:"page_size" description:"每页数量"`
}

// WeComConnectionTestResponse 企业微信连接测试响应。
type WeComConnectionTestResponse struct {
	Success bool `json:"success" description:"是否成功取得 access_token"`
}

// WeComApprovalCallbackRequest 企业微信审批回调路径与签名参数。
type WeComApprovalCallbackRequest struct {
	ApplicationID uint   `path:"application_id" required:"true" minimum:"1" description:"企业微信应用配置 ID"`
	MsgSignature  string `query:"msg_signature" required:"true" description:"企业微信回调消息签名"`
	Timestamp     string `query:"timestamp" required:"true" description:"企业微信回调时间戳"`
	Nonce         string `query:"nonce" required:"true" description:"企业微信回调随机串"`
	EchoStr       string `query:"echostr" description:"GET 回调地址验证使用的加密随机串"`
}
