package schema

import "time"

// Menu Menu对象
type Menu struct {
	RecordID    string    `json:"record_id"`    // 记录id
	Name        string    `json:"name"`         // 名称
	Path        string    `json:"path"`         // 路径
	Component   string    `json:"component"`    // 组件
	Meta        MenuMeta  `json:"meta"`         // 元数据
	ParentId    string    `json:"parent_id"`    // 父级id
	Sequence    int       `json:"sequence"`     // 排序值
	CreatedAt   time.Time `json:"created_at"`   // 创建时间
	CreatorId   string    `json:"creator_id"`   // 创建者id
	CreatorName string    `json:"creator_name"` // 创建者名称
}

type MenuMeta struct {
	Icon        string `json:"icon"`        // 图标
	Title       string `json:"title"`       // 标题
	IsLink      string `json:"isLink"`      // 是否外链
	IsHide      bool   `json:"isHide"`      // 是否隐藏
	IsFull      bool   `json:"isFull"`      // 是否全屏
	IsAffix     bool   `json:"isAffix"`     // 是否固定
	IsKeepAlive bool   `json:"isKeepAlive"` // 是否缓存
}

// MenuQueryParam 查询条件
type MenuQueryParam struct {
	LikeName  string
	RecordIDs []string
}

// MenuQueryOptions Menu对象查询可选参数项
type MenuQueryOptions struct {
	PageParam *PaginationParam // 分页参数
}

type Menus []*Menu

// MenuQueryResult Menu对象查询结果
type MenuQueryResult struct {
	Data       Menus
	PageResult *PaginationResult
}

// MenuTree 菜单树
type MenuTree struct {
	RecordID  string    `json:"record_id"`
	Name      string    `json:"name" binding:"required" `
	Path      string    `json:"path"`      // 路径
	Component string    `json:"component"` // 组件
	Meta      MenuMeta  `json:"meta"`      // 元数据
	ParentId  string    `json:"parent_id"` // 父级id
	Children  MenuTrees `json:"children"`  // 子级
}

// MenuTrees 菜单树列表
type MenuTrees []*MenuTree

func ToTree(List MenuTrees, pid string) MenuTrees {
	var newArr MenuTrees
	for _, v := range List {
		if v.ParentId == pid {
			v.Children = ToTree(List, v.RecordID)
			newArr = append(newArr, v)
		}
	}
	return newArr
}

// ToTrees 转换为菜单列表
func (a Menus) ToTrees() MenuTrees {
	list := make(MenuTrees, len(a))
	for i, item := range a {
		list[i] = &MenuTree{
			RecordID:  item.RecordID,
			Name:      item.Name,
			Path:      item.Path,
			Component: item.Component,
			Meta:      item.Meta,
			ParentId:  item.ParentId,
		}
	}
	return list
}

// FillCreator 填充创建者信息
func (a Menus) FillCreator(users Users) {
	for _, o := range a {
		for _, u := range users {
			if o.CreatorId == u.RecordID {
				o.CreatorName = u.RealName
				continue
			}
		}
	}
}
