package user

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

func PidGet(c *gin.Context) {
	var inData user.PidGetRequest
	var outData user.PidGetResponse
	//var sqlData mysql.User
	//var wallet mysql.Wallet
	var pid mysql.Pid
	err := c.ShouldBindJSON(&inData)
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}

	pid.PidStatus = 1
	pid.OpenID = inData.OpenId
	//sqlData.OpenID = inData.OpenId
	val, err := pid.Get()
	if err != nil && err.Error() != "record not found" {
		app.Error(c, 500, err, err.Error())
		return
	}

	//创建pid
	if val.Pid == "" {
		var pidCreate pdd.PddDdkGoodsPidGenerateRequest
		var pidOut pdd.PddDdkGoodsPidGenerateResponse
		var pddErr pdd.ErrorPddResponse

		confIni, err := conf.ConnIni()
		if err != nil {
			app.Error(c, 400, err, err.Error())
			return
		}
		pidCreate.ClientId = confIni.MustValue("pdd", "client_id")
		pidCreate.Type = "pdd.ddk.goods.pid.generate"
		pidCreate.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
		pidCreate.DataType = "JSON"
		pidCreate.Sign = "sign"
		pidCreate.Number = "1"

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

		pidCreate.Sign = sign
		val, err := pdd2.PostDDk(pidCreate, 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, &pidOut)
		if err != nil {
			app.Error(c, 500, err, err.Error())
			return
		}
		outData.Pid = pidOut.PIDGenerateResponse.PIDList[0].PID

		//sqlData.Pid = outData.Pid
		//sqlData.OpenID = inData.OpenId
		//sqlData.Update()
		//插入pid
		pid.OpenID = inData.OpenId
		pid.PidStatus = 1 //拼多多
		pid.Pid = pidOut.PIDGenerateResponse.PIDList[0].PID
		pid.UpdateTime = tools.GetCurrntTimeStr()
		pid.CreateTime = tools.GetCurrntTimeStr()
		pid.Create()

		//生成pid 成功 创建钱包
		var wallet mysql.Wallet
		wallet.Pid = pidOut.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
		}

	} else {
		outData.Pid = val.Pid
	}

	app.OK(c, outData, app.Success)

}