package controllers

import (
	"encoding/json"
	"git.rosy.net.cn/baseapi/platformapi/lakala"
	lakalaServer "git.rosy.net.cn/jx-callback/business/lakala"
	"git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx"
	"git.rosy.net.cn/jx-callback/globals"
	"github.com/astaxie/beego/server/web"
	"io/ioutil"
)

type LaKaLaCallbackController struct {
	web.Controller
}

// ApplyContract 合同申请回调
func (c *LaKaLaCallbackController) ApplyContract() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}
	globals.SugarLogger.Debugf("-----applyContract := %s", string(body))
	apply := &lakala.ApplyContractCallBack{}
	if err = json.Unmarshal(body, apply); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.ApplyContract(apply))
	c.ServeJSON()
	return
}

//
//// ApplyContractByPeople 合同申请人工审核回调
//func (c *LaKaLaCallbackController) ApplyContractByPeople() {
//	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
//	if err != nil {
//		c.Data["json"] = lakala.CallBackResultInfo(err)
//		c.ServeJSON()
//		return
//	}
//	globals.SugarLogger.Debugf("-----applyContractByPeople := %s", string(body))
//	apply := &lakala.ApplyContractByPeopleCallBack{}
//	if err = json.Unmarshal(body, apply); err != nil {
//		c.Data["json"] = lakala.CallBackResultInfo(err)
//		c.ServeJSON()
//		return
//	}
//
//	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.ApplyContractByPeople(apply))
//	c.ServeJSON()
//	return
//}

// SeparateMsg 商户开通/修改分账业务回调
func (c *LaKaLaCallbackController) SeparateMsg() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----SeparateMsg := %s", string(body))
	separate := &lakala.SeparateCallback{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.CreateSeparateShop(separate))
	c.ServeJSON()
	return
}

// SeparateBind 分账关系绑定回调,解绑回调
func (c *LaKaLaCallbackController) SeparateBind() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----SeparateBind := %s", string(body))
	separate := &lakala.SeparateBindCallback{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.BindSeparateBand(separate))
	c.ServeJSON()
	return

}

// Separate 分账申请/撤回/退回 回调
func (c *LaKaLaCallbackController) Separate() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----Separate := %s", string(body))
	separate := &lakala.SeparateResult{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.GetSeparateRecordsCallback(separate))
	c.ServeJSON()
	return
}

// EwalletWithdrawD1 账户D1提现回调
func (c *LaKaLaCallbackController) EwalletWithdrawD1() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----EwalletWithdrawD1 := %s", string(body))
	separate := &lakala.EwalletWithdrawD1CallBack{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.EwalletWithdrawD1Callback(separate))
	c.ServeJSON()
	return
}

// OrderStatus 收银台订单通知
func (c *LaKaLaCallbackController) OrderStatus() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----OrderStatus := %s", string(body))
	separate := &lakala.QueryOrderCallBackResp{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	c.Data["json"] = lakala.CallBackResultInfo(lakalaServer.OrderStatusCallback(separate))
	c.ServeJSON()
	return
}

// PayStatus 主扫支付状态回调
//（1）交易通知接口是交易成功完成后会向 notify_url这个地址（主扫交易或者被扫交易请求中的notify_url字段）发起交易结果通知。拉卡拉系统通知时，如果商户的应答没有按照以下“响应参考报文”示例返回成功状态时，则系统认为通知失败，系统会通过一定的策略定期重新发起通知。
//（2）同样的通知可能会多次发送给商户系统，商户系统必须能够正确处理重复的通知。
//（3）在没有收到拉卡拉支付交易通知的情况下，建议商户主动调用【06查询交易】确认交易状态。
//（4）被扫交易如果交易接口实时返回成功结果，则不再通过该接口发出交易通知；只有没有实时返回成功结果时，才会通过该接口发出交易通知。
func (c *LaKaLaCallbackController) PayStatus() {
	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
	if err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	globals.SugarLogger.Debugf("-----PayStatus := %s", string(body))
	separate := &lakala.PayStatusCallBack{}
	if err = json.Unmarshal(body, separate); err != nil {
		c.Data["json"] = lakala.CallBackResultInfo(err)
		c.ServeJSON()
		return
	}

	// todo
	c.Data["json"] = lakala.CallBackResultInfo(localjx.OnLaKaLaPayCallback(separate))
	c.ServeJSON()
	return

}
