package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
	"hongze/hz_eta_docs_api/controller/resp"
	"hongze/hz_eta_docs_api/global"
	"hongze/hz_eta_docs_api/models/crm"
	"hongze/hz_eta_docs_api/models/request"
	"hongze/hz_eta_docs_api/models/response"
	"hongze/hz_eta_docs_api/utils"
)

// VersionUpdateLogController 版本更新日志
type VersionUpdateLogController struct{}

// Menu
// @Description 菜单
// @Success 200 {string} string "获取成功"
// @Router /version_log/menu [get]
func (a *VersionUpdateLogController) Menu(c *gin.Context) {
	// 获取列表数据
	logOb := new(crm.EtaVersionUpdateLog)
	list, e := logOb.GetItemsByCondition("", make([]interface{}, 0), "update_date DESC")
	if e != nil {
		resp.FailMsg("获取失败", "获取ETA更新日志列表失败, Err: "+e.Error(), c)
		return
	}

	result := make([]string, 0)
	for _, v := range list {
		strDate := v.UpdateDate.Format("2006年01月")
		if !utils.InArrayByStr(result, strDate) {
			result = append(result, strDate)
		}
	}
	resp.OkData("获取成功", result, c)
}

// List
// @Description 列表
// @Success 200 {string} string "获取成功"
// @Router /version_log/list [get]
func (a *VersionUpdateLogController) List(c *gin.Context) {
	var req request.VersionUpdateLogListReq
	err := c.Bind(&req)
	if err != nil {
		errs, ok := err.(validator.ValidationErrors)
		if !ok {
			resp.FailData("参数解析失败", "Err:"+err.Error(), c)
			return
		}
		resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
		return
	}

	// 获取列表数据
	logOb := new(crm.EtaVersionUpdateLog)
	list, e := logOb.GetItemsByCondition("", make([]interface{}, 0), "update_date DESC")
	if e != nil {
		resp.FailMsg("获取失败", "获取ETA更新日志列表失败, Err: "+e.Error(), c)
		return
	}

	items := make([]*response.VersionUpdateLogItem, 0)
	logsMap := make(map[string][]*response.VersionUpdateLogDetailItem)
	for _, v := range list {
		strDate := v.UpdateDate.Format("2006年01月")
		if logsMap[strDate] == nil {
			logsMap[strDate] = make([]*response.VersionUpdateLogDetailItem, 0)

			item := new(response.VersionUpdateLogItem)
			item.DateFlag = strDate
			items = append(items, item)
		}
		t := new(response.VersionUpdateLogDetailItem)
		t.Version = v.Version
		t.UpdateDate = v.UpdateDate.Format(utils.FormatDate)
		t.Content = v.Content
		logsMap[strDate] = append(logsMap[strDate], t)
	}

	result := make([]*response.VersionUpdateLogItem, 0)
	for _, v := range items {
		if req.DateFlag != "" && req.DateFlag != v.DateFlag {
			continue
		}
		v.List = logsMap[v.DateFlag]
		result = append(result, v)
	}
	resp.OkData("获取成功", result, c)
}