package types

type FetchBase struct {
	Page      int    `json:"page,omitempty"`
	Size      int    `json:"size,omitempty"`
	ID        uint   `json:"id,omitempty"`
	Keyword   string `json:"keyword,omitempty"` // 关键字
	Identity  string `json:"identity,omitempty"`
	Status    int8   `json:"status,omitempty"`
	Workspace string `json:"workspace,omitempty"` // 应用编码
}

type ForgetPwdRequest struct {
	Account  string `json:"account,omitempty" validate:"required"`        // 账号
	Code     string `json:"code,omitempty" validate:"required"`           // 验证码
	Password string `json:"password,omitempty" validate:"required,min=6"` // 密码，最少6位
	Phone    string `json:"phone,omitempty" validate:"required,phone"`    // 手机号
}

type LoginRequest struct {
	Account   string `json:"account,omitempty"`                          // 账号
	Password  string `json:"password,omitempty"`                         // 密码
	Phone     string `json:"phone,omitempty" validate:"omitempty,phone"` // 手机号
	PhoneCode string `json:"phone_code,omitempty"`                       // 手机号验证码
	Workspace string `json:"workspace,omitempty"`                        // 应用workspace
	AppId     string `json:"app_id,omitempty"`                           // 应用ID
	AppKey    string `json:"app_key,omitempty"`                          // 应用密钥
}

// 用户相关请求
type UserRequest struct {
	FetchBase
	Account  string `json:"account,omitempty" validate:"omitempty,min=3,max=50"`  // 账户
	Name     string `json:"name,omitempty" validate:"omitempty,max=100"`          // 名称
	PassWord string `json:"password,omitempty" validate:"omitempty,min=6,max=50"` // 创建时必填；更新用户时忽略，改密用专用接口
	Phone    string `json:"phone,omitempty" validate:"omitempty,phone"`           // 手机号（创建时必填）
	Email    string `json:"email,omitempty" validate:"omitempty,email_format"`    // 邮箱
	Avatar   string `json:"avatar,omitempty" validate:"omitempty,max=500"`        // 头像URL
	Roles    string `json:"roles,omitempty"`                                      // 角色
}

// 用户设置角色
type UserRoleRequest struct {
	UserId uint   `json:"user_id,omitempty" validate:"required,gt=0"`            // 用户ID，必填且大于0
	RoleId []uint `json:"role_id,omitempty" validate:"required,min=1,dive,gt=0"` // 角色ID列表，必填，至少1个，每个ID大于0
}

// 应用相关请求
type ApplicationRequest struct {
	FetchBase
	Title       string `json:"title,omitempty" validate:"omitempty,min=1,max=200"`     // 应用名称
	Workspace   string `json:"workspace,omitempty" validate:"omitempty,min=1,max=100"` // 工作空间标识
	Description string `json:"description,omitempty" validate:"omitempty,max=1000"`    // 描述
}

// 权限相关请求
type PermissionRequest struct {
	FetchBase
	Title       string `json:"title,omitempty" validate:"omitempty,min=1,max=100"`     // 权限名称
	TitleEn     string `json:"title_en,omitempty" validate:"omitempty,max=100"`        // 权限名称(英文)
	Code        string `json:"code,omitempty" validate:"omitempty,min=1,max=100"`      // 权限标识
	Workspace   string `json:"workspace,omitempty" validate:"omitempty,min=1,max=100"` // 应用workspace
	Description string `json:"description,omitempty" validate:"omitempty,max=1000"`    // 权限描述
	ParentID    uint   `json:"parent_id,omitempty"`                                    // 父级ID
	MenuPath    string `json:"menu_path,omitempty" validate:"omitempty,max=500"`       // 菜单路径
	MenuIcon    string `json:"menu_icon,omitempty" validate:"omitempty,max=100"`       // 菜单图标
	Type        int8   `json:"type,omitempty" validate:"omitempty,oneof=1 2"`          // 菜单类型1=菜单 2=按钮
	Component   string `json:"component,omitempty" validate:"omitempty,max=255"`       // 组件路径
	SortKey     int8   `json:"sort_key,omitempty" validate:"omitempty,gte=0"`          // 排序键
	OrderDesc   bool   `json:"order_desc,omitempty"`                                   // 列表是否按 sort_key 降序
	IsWebPage   bool   `json:"is_web_page,omitempty"`                                  // 是否为网页
	IsNewTab    bool   `json:"is_new_tab,omitempty"`                                   // 是否在新标签页打开
	IsFull      bool   `json:"is_full,omitempty"`                                      // 单独页面，不包含菜单，默认 false
	HideMenu    bool   `json:"hide_menu,omitempty"`                                    // 隐藏菜单栏的菜单，默认 false
	WebUrl      string `json:"web_url,omitempty" validate:"omitempty,max=500"`         // 网页地址
}

// 角色相关
type RoleReq struct {
	FetchBase
	Name        string `json:"name,omitempty" validate:"omitempty,min=1,max=100"`   // 名称
	Description string `json:"description,omitempty" validate:"omitempty,max=1000"` // 角色描述
}

// 加权
type AddPmnRequest struct {
	Workspace string `json:"workspace,omitempty" validate:"omitempty,min=1,max=100"` // 应用workspace
	Id        uint   `json:"id,omitempty" validate:"omitempty,gt=0"`                 // 用户id或角色id
	List      []uint `json:"list,omitempty" validate:"omitempty,min=1,dive,gt=0"`    // 权限列表，至少1个，每个ID大于0
}

// type AddPmnList struct {
// 	PmnId uint `json:"pmn_id,omitempty"` // 权限id
// }

// 排序请求参数
type SortPmnRequest struct {
	PmnId   uint `json:"pmn_id,omitempty" validate:"required,gt=0"`     // 权限id，必填且大于0
	SortKey int  `json:"sort_key,omitempty" validate:"omitempty,gte=0"` // 序号，大于等于0
}

// 部门相关（应用->部门->权限，创建/列表/树必传 workspace）
type DptReq struct {
	FetchBase
	Name     string `json:"name,omitempty" validate:"omitempty,min=1,max=100"` // 名称
	LeaderID uint   `json:"leader_id,omitempty"`                               // 部门负责人id
	ParentID uint   `json:"parent_id,omitempty"`                               // 父级id
	Tree     bool   `json:"tree,omitempty"`                                    // 下拉列表是否返回树形（list 接口用）
}

// 部门用户（移入/移出部门）
type DptUserRequest struct {
	DptId   uint   `json:"dpt_id,omitempty" validate:"required,gt=0"`              // 部门ID
	UserIds []uint `json:"user_ids,omitempty" validate:"required,min=1,dive,gt=0"` // 用户ID列表
}
