package shanghu

import (
	"duoduo/apis/shanghu/models"
	"duoduo/models/shanghu"
	"duoduo/tools/app"
	"github.com/gin-gonic/gin"
	"strconv"
	"time"
)

func GetClientRechargeLog(c *gin.Context) {
	var inData models.MerchantRechargeClientAccountLogRequest
	var sqlData shanghu.MerchantRechargeClientAccountLog
	var outDataList []models.MerchantRechargeClientAccountLogReply
	var countData int

	err := c.ShouldBindJSON(&inData)
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}

	var pageSize = 10
	var pageIndex = 1

	if inData.PageSize != 0 {
		pageSize = inData.PageSize
	}
	if inData.PageIndex != 0 {
		pageIndex = inData.PageIndex
	}

	if inData.Type == 1 { //充值核销
		sqlData.ClientOpenID = inData.ClientOpenId

		cashOutList, count, err := sqlData.MerchantRechargeClientAccountLogListByClient(pageSize, pageIndex)
		if err != nil {
			app.Error(c, 500, err, err.Error())
			return
		}
		countData = count

		for _, v := range cashOutList {
			var merchant shanghu.Merchant
			var user shanghu.MerchantUser
			var outData models.MerchantRechargeClientAccountLogReply
			merchant.OpenId = v.MerchantOpenID
			merchantData, err := merchant.GetMerchant()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}

			user.OpenID = v.Operator
			operator, err := user.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}
			outData.MerchantOpenName = merchantData.MerchantName
			outData.CancelAmount = v.Amount.String()
			outData.CancelAmountAfter = v.AmountAfter.String()
			outData.CancelAmountPre = v.AmountPre.String()
			outData.Operator = operator.Code
			outData.CancelTime = v.CreatedAt.Format(time.DateTime)
			outDataList = append(outDataList, outData)

		}

	} else if inData.Type == 2 { //卡券核销

		var recharge shanghu.RechargeCancelLog

		recharge.ClientOpenID = inData.ClientOpenId

		cashOutList, count, err := recharge.RechargeCancelLogByClientList(pageSize, pageIndex)
		if err != nil {
			app.Error(c, 500, err, err.Error())
			return
		}

		countData = count

		for _, v := range cashOutList {
			var merchant shanghu.Merchant
			var user shanghu.MerchantUser
			var outData models.MerchantRechargeClientAccountLogReply
			merchant.OpenId = v.MerchantOpenID
			merchantData, err := merchant.GetMerchant()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}

			user.OpenID = v.Operator
			operator, err := user.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}
			outData.MerchantOpenName = merchantData.MerchantName
			outData.CancelAmount = strconv.FormatInt(int64(v.Quantity), 10)
			outData.CancelAmountAfter = strconv.FormatInt(int64(v.QuantityAfter), 10)
			outData.CancelAmountPre = strconv.FormatInt(int64(v.QuantityPre), 10)
			outData.Operator = operator.Code
			outData.CancelTime = v.CreatedAt.Format(time.DateTime)
			outDataList = append(outDataList, outData)

		}

	}

	app.PageOK(c, outDataList, countData, pageIndex, pageSize, app.Success)

}

func GetMerchantRechargeLog(c *gin.Context) {
	var inData models.MerchantRechargeAccountLogRequest
	var sqlData shanghu.MerchantRechargeClientAccountLog
	var outDataList []models.MerchantRechargeAccountLogReply
	var countData int

	err := c.ShouldBindJSON(&inData)
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}

	var pageSize = 10
	var pageIndex = 1

	if inData.PageSize != 0 {
		pageSize = inData.PageSize
	}
	if inData.PageIndex != 0 {
		pageIndex = inData.PageIndex
	}

	if inData.Type == 1 { //充值核销
		sqlData.MerchantOpenID = inData.MerchantOpenId

		cashOutList, count, err := sqlData.MerchantRechargeAccountLogList(pageSize, pageIndex)
		if err != nil {
			app.Error(c, 500, err, err.Error())
			return
		}
		countData = count

		for _, v := range cashOutList {
			var client shanghu.MerchantClientUser
			var user shanghu.MerchantUser
			//var merchant shanghu.Merchant
			var outData models.MerchantRechargeAccountLogReply
			client.ClientOpenID = v.ClientOpenID
			clientInfo, err := client.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}

			user.OpenID = v.Operator
			operator, err := user.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}
			outData.ClientCode = clientInfo.Code
			outData.CancelAmount = v.Amount.String()
			outData.CancelAmountAfter = v.AmountAfter.String()
			outData.CancelAmountPre = v.AmountPre.String()
			outData.Operator = operator.Code
			outData.CancelTime = v.CreatedAt.Format(time.DateTime)
			outDataList = append(outDataList, outData)

		}

	} else if inData.Type == 2 { //卡券核销

		var recharge shanghu.RechargeCancelLog

		recharge.MerchantOpenID = inData.MerchantOpenId

		cashOutList, count, err := recharge.RechargeCancelLogByMerchantList(pageSize, pageIndex)
		if err != nil {
			app.Error(c, 500, err, err.Error())
			return
		}

		countData = count

		for _, v := range cashOutList {
			var client shanghu.MerchantClientUser
			var user shanghu.MerchantUser
			//var merchant shanghu.Merchant
			var outData models.MerchantRechargeAccountLogReply
			client.ClientOpenID = v.ClientOpenID
			clientData, err := client.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}

			user.OpenID = v.Operator
			operator, err := user.GetUserInfo()
			if err != nil {
				app.Error(c, 500, err, err.Error())
				return
			}
			outData.ClientCode = clientData.Code
			outData.CancelAmount = strconv.FormatInt(int64(v.Quantity), 10)
			outData.CancelAmountAfter = strconv.FormatInt(int64(v.QuantityAfter), 10)
			outData.CancelAmountPre = strconv.FormatInt(int64(v.QuantityPre), 10)
			outData.Operator = operator.Code
			outData.CancelTime = v.CreatedAt.Format(time.DateTime)
			outDataList = append(outDataList, outData)

		}

	}

	app.PageOK(c, outDataList, countData, pageIndex, pageSize, app.Success)

}