package controllers

import (
	"eta/eta_api/models"
	"eta/eta_api/models/system"
	"eta/eta_api/utils"
	"strconv"
	"strings"
)

type SysMenuController struct {
	BaseAuthController
}

// @Title 获取用户权限菜单
// @Description 获取用户权限菜单接口
// @Success 200 {object} system.MenuListResp
// @router /menu/list [get]
func (this *SysRoleController) SysMenuList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		return
	}
	roleId := sysUser.RoleId
	//roleId=1
	if roleId <= 0 {
		br.Msg = "参数错误"
		return
	}
	roleIds := strconv.Itoa(roleId)
	//查询账号绑定的其他角色
	otherRoles, err := system.GetRoleIdsByAdminId(sysUser.AdminId)
	if err != nil {
		br.Msg = "获取其他角色失败"
		br.ErrMsg = "获取其他角色失败,Err:" + err.Error()
		return
	}
	if len(otherRoles) > 0 {
		for _, v := range otherRoles {
			roleIds += "," + strconv.Itoa(v.RoleId)
		}
	}
	groupId := 0
	if utils.RunMode == "release" {
		groupId = 37
	} else {
		groupId = 61
	}
	//共享客户组下的用户
	shareSellerMap := make(map[int]bool, 0)
	subAdmins, err := system.GetAdminByGroupId(groupId)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取销售失败"
		br.ErrMsg = "获取销售失败,Err:" + err.Error()
		return
	}
	for _, admin := range subAdmins {
		shareSellerMap[admin.AdminId] = true
	}

	// 审批配置
	confMap, e := models.GetBusinessConf()
	if e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
		return
	}
	openMap := map[string]bool{"false": false, "true": true}
	openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]

	list, err := system.GetMenuListByRoleIds(roleIds)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	lenList := len(list)

	menuList := make([]*system.MenuList, 0)
	for i := 0; i < lenList; i++ {
		item := list[i]
		// 审批关闭时隐藏审批菜单(这需求大可不必=_=!)
		if !openApprove && item.Name == "审批管理" {
			continue
		}
		child, err := system.GetMenuByParentIdRoleIds(roleIds, item.MenuId)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取子菜单数据失败,Err:" + err.Error()
			return
		}
		lenChild := len(child)
		for ci := 0; ci < lenChild; ci++ {
			if child[ci].Name == "领取列表" {
				if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER {
					child[ci].Name = "权益客户"
				} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER {
					child[ci].Name = "ficc客户"
				}
			}
		}
		for mi, menu := range child {
			if menu.Name == "正式客户共享" && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN &&
				sysUser.AdminId != 66 && sysUser.AdminId != 15 {
				//如果不是admin角色、共享客户分组下用户、楼颖丹账号、王沛账号 就不显示该页面
				if ok, _ := shareSellerMap[sysUser.AdminId]; !ok {
					child = append(child[:mi], child[mi+1:]...)
				}
			}

			// 审批关闭时隐藏系统管理下的审批流配置
			if menu.Name == "审批流配置" && !openApprove {
				child = append(child[:mi], child[mi+1:]...)
			}
		}

		if strings.Contains(item.Name, "出差管理") && sysUser.AdminId == 66 {
			cm := new(system.ChildMenu)
			cm.MenuId = 10000
			cm.Name = "出差审批"
			cm.NameEn = "Business Trip Approval"
			cm.Path = "businessTripApproval"
			cm.Component = "businessTripApproval"
			cm.IconPath = ""
			cm.Hidden = false
			child = append(child, cm)
		}
		//if lenChild > 1 {
		//	list[i].IsLevel = 2
		//} else {
		//	list[i].IsLevel = 1
		//	list[i].LevelPath = ""
		//}
		list[i].Children = child
		menuList = append(menuList, list[i])
	}
	resp := new(system.MenuListResp)
	resp.List = menuList
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}