package cygx

import (
	"hongze/hz_crm_api/controllers"
	"hongze/hz_crm_api/models"
	"hongze/hz_crm_api/models/company"
	"hongze/hz_crm_api/models/cygx"
	"hongze/hz_crm_api/utils"
	"strings"
)

// 到会管理
type ActivityLossCoAntroller struct {
	controllers.BaseAuthController
}

// @Title 获取流失且参加过会议的客户
// @Description 获取流失且参加过会议的客户接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} cygx.CompanyNameAndIdListResp
// @router /activityLoss/company/list [get]
func (this *ActivityLossCoAntroller) CompanyList() {
	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"
		br.Ret = 408
		return
	}
	keyWord := this.GetString("KeyWord")
	keyWord = strings.Trim(keyWord, " ")
	keyWord = strings.Replace(keyWord, "'", "", -1)
	if keyWord == "" {
		br.Msg = "请输入关键词"
		br.IsSendEmail = false
		return
	}
	resp := new(company.CompanyNameAndIdListResp)
	var companyCondition string
	var companypars []interface{}
	var listResp []*company.CompanyNameAndId
	companyCondition += ` AND b.product_name = ? `
	companypars = append(companypars, "权益")

	companyCondition += ` AND b.status = ? `
	companypars = append(companypars, "流失")

	companyCondition += ` AND a.company_name LIKE '%` + keyWord + `%' `
	companyList, err := company.GetCompanyIdListByproductName(companyCondition, companypars)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	companyArr := make([]int, 0)
	for _, v := range companyList {
		companyArr = append(companyArr, v.CompanyId)
	}
	companyLen := len(companyArr)
	if companyLen == 0 {
		goto Loop
	} else {
		var condition string
		var pars []interface{}
		condition += ` AND s.company_id IN (` + utils.GetOrmInReplace(companyLen) + `)`
		pars = append(pars, companyArr)
		companyUserSignUpList, err := cygx.GetCompanyByUserSignUp(condition, pars)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败,Err:" + err.Error()
			return
		}
		mapcompanyUserSignUp := make(map[int]int)
		for _, v := range companyUserSignUpList {
			mapcompanyUserSignUp[v.CompanyId] = v.CompanyId
		}
		for _, v := range companyList {
			if _, ok := mapcompanyUserSignUp[v.CompanyId]; ok {
				listResp = append(listResp, v)
			}
		}
	}
Loop:
	if len(listResp) == 0 {
		listResp = make([]*company.CompanyNameAndId, 0)
	}
	resp.List = listResp
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 获取流失且参加过会议的客户
// @Description 获取流失且参加过会议的客户接口
// @Param   CompanyName   query   string  true       "搜索关键词"
// @Success 200 {object} cygx.UserSignUpLossListResp
// @router /activityLoss/user/list [get]
func (this *ActivityLossCoAntroller) UserList() {
	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"
		br.Ret = 408
		return
	}
	companyName := this.GetString("CompanyName")
	companyName = strings.Trim(companyName, " ")
	companyName = strings.Replace(companyName, "'", "", -1)
	resp := new(cygx.UserSignUpLossListResp)
	nameItem, err := company.CheckCompanyProductByName(companyName, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "校验客户名称是否存在失败"
		br.ErrMsg = "校验客户名称是否存在失败,Err:" + err.Error()
		return
	}
	var listResp []*cygx.UserSignUpLossResp
	if nameItem == nil {
		goto Loop
	} else {
		companyId := nameItem.CompanyId
		var condition string
		var pars []interface{}

		condition += ` AND s.company_id =  ? `
		pars = append(pars, companyId)
		companyUserSignUpList, err := cygx.GetUserSignUpList(condition, pars)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败,Err:" + err.Error()
			return
		}
		mapUserSignUp := make(map[string]string)
		mapTotalMeeting := make(map[string]int)
		for _, v := range companyUserSignUpList {
			mapTotalMeeting[v.Mobile]++
		}
		for _, v := range companyUserSignUpList {
			if _, ok := mapUserSignUp[v.Mobile]; !ok {
				item := new(cygx.UserSignUpLossResp)
				item.RealName = v.RealName
				item.Mobile = v.Mobile
				item.TotalMeeting = mapTotalMeeting[v.Mobile]
				listResp = append(listResp, item)
			}
			mapUserSignUp[v.Mobile] = v.Mobile
		}
		resp.CompanyId = nameItem.CompanyId
		resp.CompanyName = nameItem.CompanyName
		resp.SellerName = nameItem.SellerName
	}
Loop:
	if len(listResp) == 0 {
		listResp = make([]*cygx.UserSignUpLossResp, 0)
	}
	resp.List = listResp
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 参会明细
// @Description 获取流失且参加过会议的参会明细接口
// @Param   Mobile   query   int  true       "手机号"
// @Success 200 {object} cygx.UserSignUpMeetLossListResp
// @router /activityLoss/meet/list [get]
func (this *ActivityLossCoAntroller) MeetList() {
	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"
		br.Ret = 408
		return
	}
	mobile := this.GetString("Mobile")
	if mobile == "" {
		br.Msg = "手机号不能为空"
		br.IsSendEmail = false
		return
	}
	resp := new(cygx.UserSignUpMeetLossListResp)
	userInfo, err := models.GetWxUserByMobile(mobile)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	var list []*cygx.AttendanceDetail
	if userInfo == nil {
		goto Loop
	} else {
		var condition string
		condition = ` AND s.is_meeting = 1  GROUP BY s.activity_id `
		list, err = cygx.GetAttendanceDetailListGroupByUser(mobile, condition)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败,Err:" + err.Error()
			return
		}
		resp.RealName = userInfo.RealName
		resp.Mobile = userInfo.Mobile
	}
Loop:
	if len(list) == 0 {
		list = make([]*cygx.AttendanceDetail, 0)
	}
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}