package data_manage_permission

import (
	"eta/eta_api/models/data_manage"
	"eta/eta_api/models/data_manage/data_manage_permission"
	"eta/eta_api/models/data_manage/excel"
	"eta/eta_api/models/system"
	"eta/eta_api/utils"
	"fmt"
	"github.com/rdlucklib/rdluck_tools/uuid"
	"strings"
)

// SetEdbChartPermission
// @Description:  单独给资产(指标、图表、ETA表格)设置权限
// @author: Roc
// @datetime 2024-03-27 10:52:32
// @param source int
// @param subSource int
// @param userId int
// @param userList []int
// @param isSelectAll bool
// @param dataId []string
// @param noDataId []string
// @param keyword string
// @param classify string
// @param opUserId int 操作人
// @return err error
// @return errMsg string
func SetEdbChartPermission(source, subSource, userId int, userList []int, isSelectAll bool, dataIdList, noDataIdList []string, keyword, classify string, opUserId int) (err error, errMsg string) {
	// 如果勾选全部数据,那么
	if isSelectAll {
		// 找出不要的指标ID列表
		noDataIdMap := make(map[string]string, 0)
		for _, v := range noDataIdList {
			noDataIdMap[v] = v
		}

		// 需要转义的指标/图表ID列表
		dataIdList = make([]string, 0)
		// 获取所有指标/图表
		list, _, tmpErr := GetMoveEdbChartList(source, subSource, userId, keyword, classify, 0, 100000)
		if tmpErr != nil {
			err = tmpErr
			return
		}
		for _, v := range list {
			if _, ok := noDataIdMap[v.DataId]; !ok {
				dataIdList = append(dataIdList, v.DataId)
			}
		}
	}

	if len(userList) <= 0 {
		// 说明是取消权限管控
	}

	uniqueCode := uuid.NewUUID().Hex32()
	content := `数据权限`
	dataList := make([]data_manage_permission.DataItem, 0)

	switch source {
	case 3, 4: //ETA指标库、ETA预测指标
		if source == 3 {
			content += `(ETA指标库)`
		} else {
			content += `(ETA预测指标)`
		}

		tmpList, tmpErr := data_manage.GetEdbInfoListByEdbInfoId(dataIdList)
		if tmpErr != nil {
			err = tmpErr
			return
		}
		dataIdList = make([]string, 0)
		if len(tmpList) > 0 {
			for _, v := range tmpList {
				dataList = append(dataList, data_manage_permission.DataItem{
					DataId:   fmt.Sprint(v.EdbInfoId),
					DataCode: v.EdbCode,
					DataName: v.EdbName,
				})
				dataIdList = append(dataIdList, fmt.Sprint(v.EdbInfoId))
			}
			// 重新设置权限
			edbInfoType := 0
			if source == 4 {
				edbInfoType = 1
			}
			err = data_manage_permission.SetPermissionByEdbIdList(dataIdList, userList, edbInfoType)
		}

	case 5: //图库
		content += `(ETA图库)`
		tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(dataIdList)
		if tmpErr != nil {
			err = tmpErr
			return
		}
		if len(tmpList) > 0 {
			dataIdList = make([]string, 0)
			for _, v := range tmpList {
				dataList = append(dataList, data_manage_permission.DataItem{
					DataId:   fmt.Sprint(v.ChartInfoId),
					DataCode: fmt.Sprint(v.ChartInfoId),
					DataName: v.ChartName,
				})
				dataIdList = append(dataIdList, fmt.Sprint(v.ChartInfoId))
			}

			// 重新设置权限
			chartSource := utils.CHART_SOURCE_DEFAULT
			err = data_manage_permission.SetPermissionByChartIdList(dataIdList, userList, chartSource)
		}

	case 6: // ETA表格
		content += `(ETA表格)`
		tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataIdList)
		if tmpErr != nil {
			err = tmpErr
			return
		}
		if len(tmpList) > 0 {
			dataIdList = make([]string, 0)
			for _, v := range tmpList {
				dataList = append(dataList, data_manage_permission.DataItem{
					DataId:   fmt.Sprint(v.ExcelInfoId),
					DataCode: fmt.Sprint(v.ExcelInfoId),
					DataName: v.ExcelName,
				})
				dataIdList = append(dataIdList, fmt.Sprint(v.ExcelInfoId))
			}

			// 重新设置权限
			err = data_manage_permission.SetPermissionByExcelIdList(dataIdList, userList, subSource)
		}
	default:
		return
	}

	if err != nil {
		return
	}

	var authRecordErr error
	defer func() {
		if authRecordErr != nil {
			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;数据ID列表:%s;授权人列表:%v", authRecordErr.Error(), source, subSource, strings.Join(dataIdList, ","), userList))

		}
	}()

	// 获取所有在用的用户
	cond := ` AND enabled = 1`
	pars := make([]interface{}, 0)

	adminList, authRecordErr := system.GetSysAdminList(cond, pars, []string{}, "")
	if authRecordErr != nil {
		return
	}

	// 如果没有授权人,那么就删除未授权记录
	if len(userList) < 0 {
		authRecordErr = data_manage_permission.DeleteRecordBySourceAndDataIdList(source, subSource, dataIdList)
		return
	}

	userIdMap := make(map[int]int)
	for _, tmpUserId := range userIdMap {
		userIdMap[tmpUserId] = tmpUserId
	}

	addUserIdList := make([]int, 0)
	for _, v := range adminList {
		if _, ok := userIdMap[v.AdminId]; !ok {
			addUserIdList = append(addUserIdList, v.AdminId)
		}
	}

	authRecordErr = data_manage_permission.AddRecordBySourceAndDataIdList(source, subSource, dataIdList, dataList, addUserIdList, uniqueCode, content, opUserId)

	return
}

// SetDataIsPermission
// @Description:  设置资产(指标、图表、ETA表格)分类是否涉密
// @author: Roc
// @datetime 2024-03-27 10:52:32
// @param source int
// @param subSource int
// @param dataId []string
// @return err error
// @return errMsg string
func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error, errMsg string) {
	// TODO 消息通知

	switch source {
	case 3, 4: //ETA指标库、ETA预测指标
		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
		//if tmpErr != nil {
		//	err = tmpErr
		//	return
		//}
		//if len(tmpList) > 0 {
		//}
		// 重新设置权限
		classifyType := 0
		if source == 4 {
			classifyType = 1
		}
		err = data_manage_permission.SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList, classifyType)

	case 5: //图库
		// 重新设置权限
		chartClassifySource := utils.CHART_SOURCE_DEFAULT
		err = data_manage_permission.SetIsPermissionByChartClassifyIdList(classifyIdList, chartClassifySource)

	case 6:
		// ETA表格
		// 重新设置权限
		err = data_manage_permission.SetIsPermissionByExcelClassifyIdList(classifyIdList, subSource)

	default:
		return
	}

	return
}

// SetEdbChartClassifyPermission
// @Description: 给用户设置涉密分类的权限
// @author: Roc
// @datetime 2024-03-28 14:22:30
// @param source int
// @param subSource int
// @param userList []int
// @param classifyIdList []int
// @return err error
// @return errMsg string
func SetEdbChartClassifyPermission(source, subSource int, userList []int, classifyIdList []int) (err error, errMsg string) {
	// TODO 消息通知

	if len(classifyIdList) <= 0 {
		// 说明是取消权限管控
	}

	switch source {
	case 3, 4: //ETA指标库、ETA预测指标
		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
		//if tmpErr != nil {
		//	err = tmpErr
		//	return
		//}
		//if len(tmpList) > 0 {
		//}
		// 重新设置权限
		classifyType := 0
		if source == 4 {
			classifyType = 1
		}
		err = data_manage_permission.SetPermissionByEdbClassifyIdList(classifyIdList, userList, classifyType)
	case 5: //图库

		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
		//if tmpErr != nil {
		//	err = tmpErr
		//	return
		//}
		//if len(tmpList) > 0 {
		//}
		// 重新设置权限
		chartClassifySource := utils.CHART_SOURCE_DEFAULT
		err = data_manage_permission.SetPermissionByChartClassifyIdList(classifyIdList, userList, chartClassifySource)
	case 6:
		// ETA表格
		err = data_manage_permission.SetPermissionByExcelClassifyIdList(classifyIdList, userList, subSource)
	default:
		return
	}

	return
}

// GetEdbChartClassifyIdListPermissionByUserId
// @Description: 根据用户id获取已经配置的分类id列表
// @author: Roc
// @datetime 2024-03-29 16:26:10
// @param source int
// @param subSource int
// @param userId int
// @return idList []int
// @return err error
func GetEdbChartClassifyIdListPermissionByUserId(source, subSource, userId int) (idList []int, err error) {
	switch source {
	case 3, 4: //ETA指标库、ETA预测指标
		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
		//if tmpErr != nil {
		//	err = tmpErr
		//	return
		//}
		//if len(tmpList) > 0 {
		//}
		// 重新设置权限
		classifyType := 0
		if source == 4 {
			classifyType = 1
		}
		idList, err = data_manage_permission.GetPermissionEdbClassifyIdListByUserId(userId, classifyType)
	case 5:
		//图库
		chartClassifySource := utils.CHART_SOURCE_DEFAULT
		idList, err = data_manage_permission.GetPermissionChartClassifyIdListByUserId(userId, chartClassifySource)
	case 6:
		// ETA表格
		idList, err = data_manage_permission.GetPermissionExcelClassifyIdListByUserId(userId, subSource)
	default:
		return
	}
	return
}

// GetEdbChartIdListPermissionByDataId
// @Description: 根据用户id获取已经配置的资产(指标、图表、表格)id列表
// @author: Roc
// @datetime 2024-03-29 16:26:10
// @param source int
// @param subSource int
// @param dataId int
// @return idList []int
// @return err error
func GetEdbChartIdListPermissionByDataId(source, subSource, dataId int) (idList []int, err error) {
	switch source {
	case 3, 4: //ETA指标库、ETA预测指标
		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
		//if tmpErr != nil {
		//	err = tmpErr
		//	return
		//}
		//if len(tmpList) > 0 {
		//}
		edbInfoType := 0
		if source == 4 {
			edbInfoType = 1
		}
		idList, err = data_manage_permission.GetPermissionEdbIdListByDataId(dataId, edbInfoType)
	case 5:
		//图库
		chartClassifySource := utils.CHART_SOURCE_DEFAULT
		idList, err = data_manage_permission.GetPermissionChartIdListByDataId(dataId, chartClassifySource)
	case 6:
		// ETA表格
		idList, err = data_manage_permission.GetPermissionExcelIdListByDataId(dataId, subSource)
	default:
		return
	}
	return
}