package mobile

import (
	"fmt"
	"gin-vue-admin/global"
	"gin-vue-admin/model"
	"gin-vue-admin/model/request"
	"gin-vue-admin/model/response"
	"gin-vue-admin/service"
	"gin-vue-admin/utils"
	"github.com/gin-gonic/gin"
	"github.com/xuri/excelize/v2"
	"go.uber.org/zap"
	"strconv"
	"time"
)

func GetSurveyUserList(c *gin.Context) {
	var req request.GetSurveyUserListReq
	_ = c.ShouldBindJSON(&req)

	err, list, total := service.GetSurveyUserList(req)

	reply := request.GetSurveyUserListReply{}
	reply.List = list
	reply.Total = total

	if err != nil {
		global.GVA_LOG.Error("查询失败!", zap.Any("err", err))
		response.FailWithMessage("查询失败", c)
	} else {
		response.OkWithDetailed(reply, "获取成功", c)
	}
	return
}

func GetSurveyLogList(c *gin.Context) {
	var req request.GetSurveyLogListReq
	_ = c.ShouldBindJSON(&req)

	err, list, total := service.GetSurveyLogList(req)

	reply := request.GetSurveyLogListReply{}
	reply.List = list
	reply.Total = total

	if err != nil {
		global.GVA_LOG.Error("查询失败!", zap.Any("err", err))
		response.FailWithMessage("查询失败", c)
	} else {
		response.OkWithDetailed(reply, "获取成功", c)
	}
	return
}

func CreateSurveyUser(c *gin.Context) {
	var req request.CreateSurveyUserReq
	_ = c.ShouldBindJSON(&req)

	SurveyUser := model.SurveyUser{
		Id:              req.Id,
		Contacts:        req.Contacts,
		ContactsMobile:  req.ContactsMobile,
		Reference:       req.Reference,
		ReferenceMobile: req.ReferenceMobile,
		Status:          1,
	}

	service.UpdateSurveyUser(SurveyUser)

	//for _, v := range req.Data {
	//	v.SurveyUserId = surveyUserId
	//	service.CreateSurveyUserData(v)
	//}

	response.OkWithMessage("修改成功", c)
	return
}

func CreateSurveyUserData(c *gin.Context) {
	var req request.CreateSurveyUserReq
	_ = c.ShouldBindJSON(&req)
	for _, v := range req.Data {
		v.SurveyUserId = req.Id
		service.CreateSurveyUserData(v)
	}
	response.OkWithMessage("修改成功", c)
	return
}

func CreateSurveyLog(c *gin.Context) {
	var req model.SurveyLog
	_ = c.ShouldBindJSON(&req)

	ipData, _ := service.GetIpaddr(c.ClientIP())
	//ipData, _ := service.GetIpaddr("125.34.219.138")
	//fmt.Println(ipData)

	req.Country = ipData.Country
	req.Area = ipData.Area
	req.Region = ipData.Region
	req.City = ipData.City

	req.CreateTime = utils.NowTime()
	req.Ip = c.ClientIP()
	if err := service.CreateSurveyLog(req); err != nil {
		global.GVA_LOG.Error("创建失败!", zap.Any("err", err))
		response.FailWithMessage("创建失败", c)
	} else {
		response.OkWithMessage("创建成功", c)
	}
	return
}

// 留资数据
func ExportSurveyUserExcel(c *gin.Context) {
	var req request.GetSurveyUserListReq
	_ = c.ShouldBindQuery(&req)

	mocData := service.GetMoc(1)

	req.PageSize = 99999
	req.Status = 1

	_, list, _ := service.GetSurveyUserList(req)

	fileName := "留资信息列表" + time.Now().Format("20060102")
	f := excelize.NewFile()
	// Create a new sheet.
	index := f.NewSheet(fileName)

	f.MergeCell(fileName, "A1", "I1")
	f.SetCellValue(fileName, "A1", "留资信息")
	f.MergeCell(fileName, "J1", "T1")
	f.SetCellValue(fileName, "J1", "电销沟通结果")
	f.MergeCell(fileName, "U1", "Y1")
	f.SetCellValue(fileName, "U1", "渠道信息")

	f.SetCellValue(fileName, "A2", "联系人")
	f.SetCellValue(fileName, "B2", "联系电话")
	f.SetCellValue(fileName, "C2", "省")
	f.SetCellValue(fileName, "D2", "市")
	f.SetCellValue(fileName, "E2", "区")
	f.SetCellValue(fileName, "F2", "留资时间")
	f.SetCellValue(fileName, "G2", "留资选配产品")
	f.SetCellValue(fileName, "H2", "总价")
	f.SetCellValue(fileName, "I2", "备注")
	f.SetCellValue(fileName, "J2", "电话沟通")
	f.SetCellValue(fileName, "K2", "沟通日期")
	f.SetCellValue(fileName, "L2", "医院名称")
	f.SetCellValue(fileName, "M2", "医院状态")
	f.SetCellValue(fileName, "N2", "开业时间")
	f.SetCellValue(fileName, "O2", "所属省份")
	f.SetCellValue(fileName, "P2", "签单状态")
	f.SetCellValue(fileName, "Q2", "转介绍渠道状态")
	f.SetCellValue(fileName, "R2", "签约金额")
	f.SetCellValue(fileName, "S2", "签约选配产品")
	f.SetCellValue(fileName, "T2", "电销人员")
	f.SetCellValue(fileName, "U2", "转介绍人")
	f.SetCellValue(fileName, "V2", "转介绍人电话")
	f.SetCellValue(fileName, "Z2", "渠道类型")
	f.SetCellValue(fileName, "X2", "渠道")
	f.SetCellValue(fileName, "Y2", "渠道链接")

	for k, v := range list {

		surveyData := service.GetSurveyUserDataList(v.Id)

		optionData := ""
		price := 0
		for _, v2 := range surveyData {
			optionData += v2.OptionValue + " * " + strconv.Itoa(v2.OptionNum) + "; "
			price += v2.Price
		}

		region := v.CRegion
		if region == "" {
			region = v.Region
		}

		city := v.CCity
		if city == "" {
			city = v.City
		}

		url := global.GVA_CONFIG.Common.Url + "?" + v.Vcode

		a := strconv.Itoa(k + 3)
		f.SetCellValue(fileName, "A"+a, v.Contacts)
		f.SetCellValue(fileName, "B"+a, v.ContactsMobile)
		f.SetCellValue(fileName, "C"+a, region)
		f.SetCellValue(fileName, "D"+a, city)
		f.SetCellValue(fileName, "E"+a, v.CZone)
		f.SetCellValue(fileName, "F"+a, utils.StringToTime(v.CreateTime))
		f.SetCellValue(fileName, "G"+a, optionData)
		f.SetCellValue(fileName, "H"+a, price)
		f.SetCellValue(fileName, "I"+a, "")
		f.SetCellValue(fileName, "J"+a, "")
		f.SetCellValue(fileName, "K"+a, "")
		f.SetCellValue(fileName, "L"+a, "")
		f.SetCellValue(fileName, "M"+a, "")
		f.SetCellValue(fileName, "N"+a, "")
		f.SetCellValue(fileName, "O"+a, "")
		f.SetCellValue(fileName, "P"+a, "")
		f.SetCellValue(fileName, "Q"+a, "")
		f.SetCellValue(fileName, "R"+a, "")
		f.SetCellValue(fileName, "S"+a, "")
		f.SetCellValue(fileName, "T"+a, "")
		f.SetCellValue(fileName, "U"+a, v.Reference)
		f.SetCellValue(fileName, "V"+a, v.ReferenceMobile)
		f.SetCellValue(fileName, "W"+a, mocData[v.MocId])
		f.SetCellValue(fileName, "X"+a, "短信")
		f.SetCellValue(fileName, "Y"+a, url)
	}

	// Set active sheet of the workbook.
	f.SetActiveSheet(index)
	// Save xlsx file by the given path.
	if err := f.SaveAs("./" + fileName + ".csv"); err != nil {
		fmt.Println(err)
		return
	}

	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "./"+fileName+".csv")) //fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
	c.Writer.Header().Add("Content-Type", "application/octet-stream")
	c.File("./" + fileName + ".csv")
	return
}

// 汇总
func ExportMocDataExcel(c *gin.Context) {
	var req request.GetSurveyUserListReq
	_ = c.ShouldBindQuery(&req)

	mocData := service.GetMoc(1)

	fileName := "数据统计" + time.Now().Format("20060102")
	f := excelize.NewFile()
	// Create a new sheet.
	index := f.NewSheet(fileName)

	f.SetCellValue(fileName, "A1", "日期")
	f.SetCellValue(fileName, "B1", "渠道类型")
	f.SetCellValue(fileName, "C1", "渠道")
	f.SetCellValue(fileName, "D1", "推广链接")
	f.SetCellValue(fileName, "E1", "推广费用")
	f.SetCellValue(fileName, "F1", "曝光量")
	f.SetCellValue(fileName, "G1", "点击量")
	f.SetCellValue(fileName, "H1", "点击率")
	f.SetCellValue(fileName, "I1", "留资数量")
	f.SetCellValue(fileName, "J1", "留资率")
	f.SetCellValue(fileName, "K1", "获客单价")

	for k, v := range mocData {
		req.MocId = k
		req.Status = 1
		surveyCount := service.GetSurveyUserCount(req) //留资数量

		logCountReq := request.GetSurveyLogListReq{
			SlPage:          10,
			MocId:           k,
			StartCreateTime: req.StartCreateTime,
			EndCreateTime:   req.EndCreateTime,
		}
		logCount := service.GetSurveyLogCount(logCountReq) //点击量

		a := strconv.Itoa(k + 1)
		f.SetCellValue(fileName, "A"+a, req.StartCreateTime)
		f.SetCellValue(fileName, "B"+a, v)
		f.SetCellValue(fileName, "C"+a, "短信")
		f.SetCellValue(fileName, "D"+a, "")
		f.SetCellValue(fileName, "E"+a, "")
		f.SetCellValue(fileName, "F"+a, "")
		f.SetCellValue(fileName, "G"+a, logCount[k])
		f.SetCellValue(fileName, "H"+a, "")
		f.SetCellValue(fileName, "I"+a, surveyCount)
		f.SetCellValue(fileName, "J"+a, "")
		f.SetCellValue(fileName, "K"+a, "")
	}
	// Set active sheet of the workbook.
	f.SetActiveSheet(index)
	// Save xlsx file by the given path.
	if err := f.SaveAs("./" + fileName + ".csv"); err != nil {
		fmt.Println(err)
		return
	}

	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "./"+fileName+".csv")) //fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
	c.Writer.Header().Add("Content-Type", "application/octet-stream")
	c.File("./" + fileName + ".csv")
	return
}

// 明细
func ExportSurveyLogPageList(c *gin.Context) {
	var req request.GetSurveyLogListReq
	_ = c.ShouldBindQuery(&req)

	list := service.GetSurveyLogPageList(req)

	fileName := "点击明细" + time.Now().Format("20060102")
	f := excelize.NewFile()
	// Create a new sheet.
	index := f.NewSheet(fileName)

	f.SetCellValue(fileName, "A1", "用户ID")
	f.SetCellValue(fileName, "B1", "用户名")
	f.SetCellValue(fileName, "C1", "省")
	f.SetCellValue(fileName, "D1", "市")
	f.SetCellValue(fileName, "E1", "工作人员")
	f.SetCellValue(fileName, "F1", "工作人员电话")
	f.SetCellValue(fileName, "G1", "数据来源")
	f.SetCellValue(fileName, "H1", "访问IP")
	f.SetCellValue(fileName, "I1", "访问时间")
	f.SetCellValue(fileName, "J1", "是否识别")

	for k, v := range list {
		userType := "未识别"
		if v.UserType == 1 {
			userType = "已识别"
		}
		a := strconv.Itoa(k + 2)
		f.SetCellValue(fileName, "A"+a, v.Id)
		f.SetCellValue(fileName, "B"+a, v.UserName)
		f.SetCellValue(fileName, "C"+a, v.Region)
		f.SetCellValue(fileName, "D"+a, v.City)
		f.SetCellValue(fileName, "E"+a, v.WorkerName)
		f.SetCellValue(fileName, "F"+a, v.WorkerMobile)
		f.SetCellValue(fileName, "G"+a, v.UserSource)
		f.SetCellValue(fileName, "H"+a, v.Ip)
		f.SetCellValue(fileName, "I"+a, utils.StringToTime(v.CreateTime))
		f.SetCellValue(fileName, "J"+a, userType)
	}
	// Set active sheet of the workbook.
	f.SetActiveSheet(index)
	// Save xlsx file by the given path.
	if err := f.SaveAs("./" + fileName + ".csv"); err != nil {
		fmt.Println(err)
		return
	}

	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "./"+fileName+".csv")) //fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
	c.Writer.Header().Add("Content-Type", "application/octet-stream")
	c.File("./" + fileName + ".csv")
	return
}