package pc

import (
	"errors"
	"fmt"
	"hongze/hongze_yb/global"
	"hongze/hongze_yb/models/response/pc"
	"hongze/hongze_yb/models/tables/rddp/classify"
	"hongze/hongze_yb/services/user"
	"sort"
)

// GetClassifyFirstList 获取一级分类列表
func GetClassifyFirstList(user user.UserInfo) (list pc.ClassifyFirstList, err error) {
	var errMsg string
	defer func() {
		if err != nil {
			global.LOG.Critical(fmt.Sprintf("GetClassifyFirstList: userId=%d, err:%s， errMsg:%s", user.UserID, err.Error(), errMsg))
		}
	}()

	classifyParents, err := classify.GetParentList()
	if err != nil {
		errMsg = err.Error()
		err = errors.New("分类查询出错")
		return
	}
	if len(classifyParents) == 0 {
		err = errors.New("分类不存在")
		return
	}

	classifyIconMap := make(map[string]string)
	classifySortMap := make(map[string]int)
	var names []string
	for _, v := range classifyParents {
		classifyIconMap[v.ClassifyName] = v.YbFiccPcIcon
		classifySortMap[v.ClassifyName] = v.YbFiccSort
		names = append(names, v.ClassifyName)
	}

	reportList,err := pc.GetLatestStage(names)
	if err != nil {
		errMsg = err.Error()
		err = errors.New("报告查询出错")
		return
	}
	for _, item := range classifyParents {
		temp := new(pc.ClassifyFirstListItem)
		temp.ClassifyIdFirst = item.Id
		temp.ClassifyNameFirst = item.ClassifyName
		temp.BackImgUrl = classifyIconMap[item.ClassifyName]
		temp.Sort = classifySortMap[item.ClassifyName]
		if temp.Sort == 0 {
			continue
		}
		// ShowType展示类型：1-列表 2-专栏; RedirectType跳转类型：1-专栏列表 2-报告列表 3-专栏详情
		temp.RedirectType = 2
		if item.ShowType == 2 {
			temp.RedirectType = 1
			classifyChild, _ := classify.GetChildByPid(item.Id)
			if classifyChild != nil && len(classifyChild) == 1 {
				// 存在二级分类且仅有一个时直接跳转专栏详情
				temp.ClassifyIdSecond = classifyChild[0].Id
				temp.ClassifyNameSecond = classifyChild[0].ClassifyName
				temp.RedirectType = 3
			}
		}
		list = append(list, temp)
	}
	for _, item := range list {
		for _, report := range reportList {
			if report.ClassifyNameFirst == item.ClassifyNameFirst {
				item.Latest = report.Stage
			}
		}
	}
	if len(list) > 0 {
		sort.Sort(list)
	}

	return
}