package services

import (
	"fmt"
	"hongze/hongze_mobile_admin/models"
	"hongze/hongze_mobile_admin/models/tables/company_operation_record"
	"hongze/hongze_mobile_admin/services/alarm_msg"
	"hongze/hongze_mobile_admin/utils"
	"time"
)

//获取产品权限
func GetProductId(roleTypeCode string) (productId int) {
	if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
		roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN ||
		roleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP ||
		roleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT {
		productId = 1
	} else if roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN ||
		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP ||
		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT {
		productId = 2
	} else {

		productId = 0
	}
	return
}

//校验当前操作员是否具有联系人权限是否有操作权限
func CheckCompanyUserButton(roleTypeCode string, itemSellerId, sysUserId, productId int) (ok bool) {
	if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
		ok = true
		return
	}
	if sysUserId == itemSellerId {
		ok = true
		return
	} else {
		if productId == 1 && roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
			//如果是ficc类型,同时当前账户是ficc管理员
			ok = true
		} else if productId == 2 && roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
			//如果是权益类型,同时当前账户是 权益管理员
			ok = true
		}
	}
	return
}

//添加操作日志
func AddCompanyOperationRecord(companyId, sellerId, sysUserId, productId, approveAdminId int, companyName, productName, sysUserRealName, remark, operation, approveContent, approveUserRealName, approveRemark, status string) (err error) {
	defer func() {
		if err != nil {
			//go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "services:AddCompanyOperationRecord;Err"+err.Error(), utils.EmailSendToUsers)
			go alarm_msg.SendAlarmMsg("services:AddCompanyOperationRecord;Err"+err.Error(), 3)
		}
	}()
	record := new(company_operation_record.CompanyOperationRecord)
	record.CompanyId = companyId
	record.CompanyName = companyName
	record.SellerId = sellerId
	record.SysUserId = sysUserId
	record.SysRealName = sysUserRealName
	record.Remark = remark
	record.Operation = operation
	record.CreateTime = time.Now()
	record.ProductId = productId
	record.ProductName = productName
	record.ApproveUserId = approveAdminId
	record.ApproveRealName = approveUserRealName
	record.ApproveContent = approveContent
	record.ApproveRemark = approveRemark
	record.Status = status
	_, err = company_operation_record.AddCompanyOperationRecord(record)
	return
}

func GetFiccCountUserViewHistoryByCompanyIds(companyIdStr string) (companyViewTotal map[int]int, err error) {
	//user_view_record mobile
	companyViewTotal = make(map[int]int)
	userViewList, err := models.GetCountUserViewHistoryByCompanyIdsMobile(companyIdStr)
	if err != nil {
		return
	}
	for _, userView := range userViewList {
		companyViewTotal[userView.CompanyId] = userView.ViewTotal
	}
	userViewList, err = models.GetCountUserViewHistoryByCompanyIdsEmail(companyIdStr)
	if err != nil {
		return
	}
	checkCount(companyViewTotal, userViewList)

	//AdvisoryArticleViewRecord mobile
	userViewList, err = models.GetCountAdvisoryArticleViewRecordByCompanyIdsMobile(companyIdStr)
	if err != nil {
		return
	}
	checkCount(companyViewTotal, userViewList)

	//AdvisoryArticleViewRecord email
	userViewList, err = models.GetCountAdvisoryArticleViewRecordByCompanyIdsEmail(companyIdStr)
	if err != nil {
		return
	}
	checkCount(companyViewTotal, userViewList)

	//ReportViewRecord mobile
	userViewList, err = models.GetCountReportViewRecordByCompanyIdsMobile(companyIdStr)
	if err != nil {
		return
	}
	checkCount(companyViewTotal, userViewList)

	//ReportViewRecord email
	userViewList, err = models.GetCountReportViewRecordByCompanyIdsEmail(companyIdStr)
	if err != nil {
		return
	}
	checkCount(companyViewTotal, userViewList)
	fmt.Println("companyViewTotal5:", companyViewTotal)
	return
}

func checkCount(companyViewTotal map[int]int, userViewList []*models.CompanyViewTotalSlice) {
	for _, userView := range userViewList {
		if viewTotal, ok := companyViewTotal[userView.CompanyId]; ok {
			companyViewTotal[userView.CompanyId] = viewTotal + userView.ViewTotal
		} else { //如果没有数据,那么直接赋值
			companyViewTotal[userView.CompanyId] = userView.ViewTotal
		}
	}
	return
}