package system

// MenuInfo 菜单信息
type MenuInfo struct {
	ID        uint       `json:"ID"`
	ParentId  uint       `json:"parentId"`
	Path      string     `json:"path"`
	Name      string     `json:"name"`
	Component string     `json:"component"`
	Sort      int        `json:"sort"`
	Hidden    bool       `json:"hidden"`
	Meta      MenuMeta   `json:"meta"`
	Children  []MenuInfo `json:"children,omitempty"`
}

// MenuMeta 菜单元信息
type MenuMeta struct {
	Title       string `json:"title"`
	Icon        string `json:"icon"`
	KeepAlive   bool   `json:"keepAlive"`
	DefaultMenu bool   `json:"defaultMenu"`
	CloseTab    bool   `json:"closeTab"`
}

// BaseMenuInfo 基础菜单信息
type BaseMenuInfo struct {
	ID         uint            `json:"ID"`
	ParentId   uint            `json:"parentId"`
	Path       string          `json:"path"`
	Name       string          `json:"name"`
	Component  string          `json:"component"`
	Sort       int             `json:"sort"`
	Hidden     bool            `json:"hidden"`
	Meta       MenuMeta        `json:"meta"`
	MenuBtn    []MenuBtnInfo   `json:"menuBtn,omitempty"`
	Parameters []MenuParamInfo `json:"parameters,omitempty"`
	Children   []BaseMenuInfo  `json:"children,omitempty"`
}

// MenuBtnInfo 菜单按钮信息
type MenuBtnInfo struct {
	ID   uint   `json:"ID"`
	Name string `json:"name"`
	Desc string `json:"desc"`
}

// MenuParamInfo 菜单参数信息
type MenuParamInfo struct {
	ID    uint   `json:"ID"`
	Type  string `json:"type"`
	Key   string `json:"key"`
	Value string `json:"value"`
}

// AddMenuAuthorityRequest 添加菜单权限请求
type AddMenuAuthorityRequest struct {
	Menus       []BaseMenuInfo `json:"menus"`
	AuthorityId uint           `json:"authorityId"`
}

// CreateMenuRequest 创建菜单请求
type CreateMenuRequest struct {
	ParentId   uint            `json:"parentId"`
	Path       string          `json:"path" binding:"required"`
	Name       string          `json:"name" binding:"required"`
	Component  string          `json:"component"`
	Sort       int             `json:"sort"`
	Hidden     bool            `json:"hidden"`
	Meta       MenuMeta        `json:"meta"`
	MenuBtn    []MenuBtnInfo   `json:"menuBtn,omitempty"`
	Parameters []MenuParamInfo `json:"parameters,omitempty"`
}

// UpdateMenuRequest 更新菜单请求
type UpdateMenuRequest struct {
	ID         uint            `json:"ID" binding:"required"`
	ParentId   uint            `json:"parentId"`
	Path       string          `json:"path"`
	Name       string          `json:"name"`
	Component  string          `json:"component"`
	Sort       int             `json:"sort"`
	Hidden     bool            `json:"hidden"`
	Meta       MenuMeta        `json:"meta"`
	MenuBtn    []MenuBtnInfo   `json:"menuBtn,omitempty"`
	Parameters []MenuParamInfo `json:"parameters,omitempty"`
}
