package data

import (
	"eta/eta_mobile/models/data_manage"
)

func chartClassifyHaveChild(allNode []*data_manage.ChartClassifyItems, node *data_manage.ChartClassifyItems) (childs []*data_manage.ChartClassifyItems, yes bool) {
	for _, v := range allNode {
		if v.ParentId == node.ChartClassifyId {
			childs = append(childs, v)
		}
	}
	if len(childs) > 0 {
		yes = true
	}
	return
}

func ChartClassifyItemsMakeTree(allNode []*data_manage.ChartClassifyItems, node *data_manage.ChartClassifyItems) {
	childs, _ := chartClassifyHaveChild(allNode, node) //判断节点是否有子节点并返回
	if len(childs) > 0 {
		node.Children = append(node.Children, childs[0:]...) //添加子节点
		for _, v := range childs {                           //查询子节点的子节点,并添加到子节点
			_, has := chartClassifyHaveChild(allNode, v)
			if has {
				ChartClassifyItemsMakeTree(allNode, v) //递归添加节点
			} else {
				childrenArr := make([]*data_manage.ChartClassifyItems, 0)
				v.Children = childrenArr
			}
		}
	} else {
		childrenArr := make([]*data_manage.ChartClassifyItems, 0)
		node.Children = childrenArr
	}
}

// HandleNoPermissionChart 图表列表返回,将没有权限的图表移除
func HandleNoPermissionChart(allNodes []*data_manage.ChartClassifyItems, noPermissionChartIdMap map[int]bool) (newAllNodes []*data_manage.ChartClassifyItems) {
	// 移除没有权限的图表
	newAllNodes = make([]*data_manage.ChartClassifyItems, 0)
	for _, node := range allNodes {
		// 二级分类
		tmpNodeInfo := *node
		tmpNodeList := make([]*data_manage.ChartClassifyItems, 0)
		if node.Children != nil {
			for _, chartList := range node.Children {
				tmpInfo := *chartList
				tmpList := make([]*data_manage.ChartClassifyItems, 0)

				if chartList.Children != nil {
					for _, chartInfo := range chartList.Children {
						thirdInfo := *chartInfo
						thirdList := make([]*data_manage.ChartClassifyItems, 0)
						// 如果指标不可见,那么就不返回该指标
						if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
							continue
						}
						tmpList = append(tmpList, chartInfo)

						if chartInfo.Children != nil {
							for _, thirdChart := range chartInfo.Children {
								// 如果指标不可见,那么就不返回该指标
								if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
									continue
								}
								thirdList = append(thirdList, thirdChart)
							}
						}
						thirdInfo.Children = thirdList
						tmpList = append(tmpList, &thirdInfo)
					}
				}
				tmpInfo.Children = tmpList
				tmpNodeList = append(tmpNodeList, &tmpInfo)
			}
		}
		tmpNodeInfo.Children = tmpNodeList
		newAllNodes = append(newAllNodes, &tmpNodeInfo)
	}

	return
}