package services

import (
	"fmt"
	"hongze/hz_eta_api/models"
	"hongze/hz_eta_api/services/alarm_msg"
)

// UpdateParentClassifyHasTel 更新父级分类是否含有电话字段
func UpdateParentClassifyHasTel(classifyId, parentId, hasTeleconference int) (err error) {
	if classifyId <= 0 || parentId <= 0 {
		return
	}
	defer func() {
		if err != nil {
			alarm_msg.SendAlarmMsg("编辑分类后-修改父级分类电话会信息失败, ErrMsg: "+err.Error(), 3)
		}
	}()

	parentClassify, e := models.GetClassifyById(parentId)
	if e != nil {
		err = fmt.Errorf("获取父级分类信息失败, Err: %s", e.Error())
		return
	}
	updateParent := false
	updateCols := make([]string, 0)
	updateCols = append(updateCols, "HasTeleconference")
	if hasTeleconference == 1 {
		// 二级分类包含电话会,则一级分类也默认包含电话会
		if parentClassify.HasTeleconference == 0 {
			parentClassify.HasTeleconference = 1
			updateParent = true
		}
	} else {
		// 二级分类均无电话会,则一级分类也无电话会
		if parentClassify.HasTeleconference == 1 {
			child, e := models.GetClassifyChild(parentClassify.Id, "")
			if e != nil {
				err = fmt.Errorf("获取子分类失败, Err: %s", e.Error())
				return
			}
			// 存在同一级分类下的二级分类有电话会则不变动
			hasTel := false
			for i := 0; i < len(child); i++ {
				if child[i].HasTeleconference == 1 && child[i].Id != classifyId {
					hasTel = true
					break
				}
			}
			if !hasTel {
				parentClassify.HasTeleconference = 0
				updateParent = true
			}
		}
	}
	if updateParent {
		if e = parentClassify.UpdateClassify(updateCols); e != nil {
			err = fmt.Errorf("更新父级分类失败, Err: %s", e.Error())
			return
		}
	}
	return
}

// AfterUpdateClassifyNameOrParent 更新报告分类名称/父级分类后的操作
// 当二级分类名称做了修改, 更新chart_permission_search_key_word_mapping对应的key_word
// 以及report表中的classify_name_second, 不然报告的权限会有BUG
func AfterUpdateClassifyNameOrParent(classifyId, parentId, originParentId int, originName, classifyName string) (err error) {
	if classifyId == 0 {
		return
	}
	defer func() {
		if err != nil {
			alarm_msg.SendAlarmMsg("更改分类名称后-同步更新报告表字段及权限表关键词失败, ErrMsg: "+err.Error(), 3)
		}
	}()

	// 一级分类-修改名称
	if originName != classifyName && parentId == 0 {
		// 更新报告表分类字段
		if e := models.UpdateReportFirstClassifyNameByClassifyId(classifyId, classifyName); e != nil {
			err = fmt.Errorf("更新报告表一级分类名称失败, Err: %s", e.Error())
			return
		}
		return
	}

	// 二级分类-修改名称
	if originName != classifyName && parentId > 0 {
		// 更新关键词
		if e := models.UpdateChartPermissionNameFromMappingByKeyword(classifyName, originName, "rddp"); e != nil {
			err = fmt.Errorf("更新二级分类关键词失败, Err: %s", e.Error())
			return
		}
		// 更新报告表分类字段
		if e := models.UpdateReportSecondClassifyNameByClassifyId(classifyId, classifyName); e != nil {
			err = fmt.Errorf("更新报告表二级分类名称失败, Err: %s", e.Error())
			return
		}
		return
	}

	// 二级分类-修改了父级分类
	if originParentId > 0 && parentId > 0 && originParentId != parentId {
		parentClassify, e := models.GetClassifyById(parentId)
		if e != nil {
			err = fmt.Errorf("获取父级分类信息失败, Err: %s", e.Error())
			return
		}
		// 更新报告表一级分类名称和ID
		if e = models.UpdateReportSecondClassifyFirstNameByClassifyId(classifyId, parentClassify.Id, parentClassify.ClassifyName); e != nil {
			err = fmt.Errorf("更新报告表一级分类名称和ID, Err: %s", e.Error())
			return
		}
	}
	return
}