package pdd

import (
	"duoduo/conf"
	"duoduo/models/mysql"
	"duoduo/models/pdd"
	"duoduo/tools"
	"duoduo/tools/app"
	"fmt"
	"github.com/gin-gonic/gin"
	"time"
)

//生成pid
func PddDdkGoodsPidGenerate(c *gin.Context) {
	var inData pdd.PddDdkGoodsPidGenerateRequest
	var outData pdd.PddDdkGoodsPidGenerateResponse
	var pddErr pdd.ErrorPddResponse
	var pid mysql.Pid

	confIni, err := conf.ConnIni()
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}

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

	//先查询用户名下是否有拼多多pid,有返回现有pid
	pid.OpenID = inData.OpenId
	pid.PidStatus = 1 //拼多多
	pidVal, err := pid.Get()
	if pidVal.Pid != "" {
		var pidList pdd.PIDList
		pidList.PID = pidVal.Pid

		outData.PIDGenerateResponse.PIDList = append(outData.PIDGenerateResponse.PIDList, pidList)
		//outData.PIDGenerateResponse.PIDList[0].PID = pidVal.Pid
		app.OK(c, outData, app.Success)
		return
	}

	inData.ClientId = confIni.MustValue("pdd", "client_id")
	inData.Type = "pdd.ddk.goods.pid.generate"
	inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
	inData.DataType = "JSON"
	inData.Sign = "sign"

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

	inData.Sign = sign
	val, err := PostDDk(inData, nil)

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

	err = tools.JsonUnmarshal(val, &pddErr)
	if err != nil {
		app.Error(c, 500, err, err.Error())
		return
	}
	if pddErr.ErrorResponse.ErrorCode != 0 {
		app.Error(c, 500, err, pddErr.ErrorResponse.ErrorMsg)
		return
	}

	err = tools.JsonUnmarshal(val, &outData)
	if err != nil {
		app.Error(c, 500, err, err.Error())
		return
	}

	//生成pid 成功 创建钱包
	var wallet mysql.Wallet
	wallet.Pid = outData.PIDGenerateResponse.PIDList[0].PID
	wallet.OpenID = inData.OpenId
	wallet.CreateTime = tools.GetCurrntTimeStr()
	wallet.UpdateTime = tools.GetCurrntTimeStr()
	_, err = wallet.Create()
	if err != nil {
		app.Error(c, 500, err, "创建钱包失败")
		return
	}
	app.OK(c, outData, app.Success)
}