package services

import (
	"errors"
	"fmt"
	"hongze/hongze_clpt/models"
	"hongze/hongze_clpt/utils"
	"strconv"
	"time"
)

// 约访专家的请求
func AddArticleApplyAppointmentExpert(user *models.WxUserItem, articleId int) (err error) {
	defer func() {
		if err != nil {
			go utils.SendAlarmMsg("约访专家的请求失败"+err.Error(), 2)
		}
	}()
	item := new(models.CygxArticleApplyAppointmentExpert)
	item.UserId = user.UserId
	item.ArticleId = articleId
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	item.RegisterPlatform = utils.REGISTER_PLATFORM
	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		return
	}
	item.RealName = user.RealName
	if sellerItem != nil {
		item.SellerName = sellerItem.RealName
	}
	_, e := models.AddCygxArticleApplyAppointmentExpert(item)
	if e != nil {
		err = errors.New("AddCygxArticleApplyAppointmentExpert, Err: " + e.Error())
		return
	}

	return
}

// 用户约访专家的请求,向对应销售发送模版消息
func SendArticleApplyAppointmentExpertTemplateMsg(user *models.WxUserItem, articleId int) (err error) {
	var msg string
	msg = fmt.Sprint(user, articleId)
	defer func() {
		if err != nil {
			go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+msg, 2)
		}
	}()
	//获取权益销售
	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		return
	}
	if sellerItem == nil {
		return
	}
	//文章详情
	detailArticle, e := models.GetArticleDetailById(articleId)
	if e != nil {
		err = errors.New("GetArticleDetailById, Err: " + e.Error())
		return
	}
	//销售对应的Openid
	openIdList, e := models.GetWxOpenIdByMobileList(sellerItem.Mobile)
	if e != nil {
		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
		return
	}
	if len(openIdList) == 0 {
		return
	}
	openIdArr := make([]string, 0)
	for _, v := range openIdList {
		openIdArr = append(openIdArr, v.OpenId)
	}
	var keyword1 string
	var keyword2 string
	var keyword3 string
	var keyword4 string
	keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, "(", sellerItem.RealName, ")")
	if user.Mobile == "" {
		user.Mobile = user.Email
	}
	keyword2 = user.Mobile
	keyword3 = time.Now().Format(utils.FormatDateTime)
	keyword4 = fmt.Sprint("约访专家(", detailArticle.Title, ")")
	var redirectUrl string
	redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
	sendInfo := new(SendWxTemplate)
	sendInfo.Keyword1 = keyword1
	sendInfo.Keyword2 = keyword2
	sendInfo.Keyword3 = keyword3
	sendInfo.Keyword4 = keyword4
	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
	sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
	sendInfo.RedirectUrl = redirectUrl
	sendInfo.RedirectTarget = 3
	sendInfo.Resource = strconv.Itoa(articleId)
	sendInfo.OpenIdArr = openIdArr
	err = PublicSendTemplateMsg(sendInfo)
	return
}

// 获取用户数是否约访专家的请求
func GetIsApplyAppointmentExpert(user *models.WxUserItem, articleId int) (isApplyAppointmentExpert bool) {
	var err error
	defer func() {
		if err != nil {
			fmt.Println(err)
			go utils.SendAlarmMsg("获取用户数是否约访专家的请求失败"+err.Error(), 2)
		}
	}()
	var condition string
	var pars []interface{}
	condition += ` AND article_id =? AND user_id = ?  `
	pars = append(pars, articleId, user.UserId)
	total, e := models.GetCygxArticleApplyAppointmentExpertCount(condition, pars)
	if e != nil {
		err = errors.New("GetCygxArticleApplyAppointmentExpertCount, Err: " + e.Error())
		return
	}
	fmt.Println(total)
	if total > 0 {
		isApplyAppointmentExpert = true
	}
	return
}