package ebai

import (
	"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
	"git.rosy.net.cn/baseapi/utils"
	"git.rosy.net.cn/jx-callback/business/jxutils"
	"git.rosy.net.cn/jx-callback/business/model"
	"git.rosy.net.cn/jx-callback/globals"
)

func OnCallbackMsg(msg *ebaiapi.CallbackMsg) (response *ebaiapi.CallbackResponse) {
	globals.SugarLogger.Debugf("ebai OnCallbackMsg msg:%s", utils.Format4Output(msg, true))
	if CurPurchaseHandler != nil {
		globals.SugarLogger.Debugf("ebai OnCallbackMsg msg 1")
		if orderID := GetOrderIDFromMsg(msg); orderID != "" {
			globals.SugarLogger.Debugf("ebai OnCallbackMsg msg 2 ,%d", orderID)
			jxutils.CallMsgHandler(func() {
				globals.SugarLogger.Debugf("ebai OnCallbackMsg msg 2.5 ,%s", msg.Cmd)
				switch msg.Cmd {
				case ebaiapi.CmdOrderCreate, ebaiapi.CmdOrderStatus, ebaiapi.CmdOrderUserCancel, ebaiapi.CmdOrderPartRefund:
					globals.SugarLogger.Debugf("ebai OnCallbackMsg msg 3 ,%s", msg.Cmd)
					response = CurPurchaseHandler.onOrderMsg(msg)
				case ebaiapi.CmdOrderDeliveryStatus:
					response = CurPurchaseHandler.onWaybillMsg(msg)
				}
			}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDEBAI))
		}
		if /*msg.Cmd == ebaiapi.CmdOrderPartRefund || msg.Cmd == ebaiapi.CmdOrderUserCancel || */ msg.Cmd == ebaiapi.CmdOrderDeliveryStatus {
			response = CurPurchaseHandler.OnFinancialMsg(msg)
		} else if msg.Cmd == ebaiapi.CmdShopMsgPush {
			response = CurPurchaseHandler.onShopMsgPush(msg)
		}
	}
	return response
}

func GetOrderIDFromMsg(msg *ebaiapi.CallbackMsg) string {
	return GetOrderIDFromMap(msg.Body)
}

func GetOrderIDFromMap(orderMap map[string]interface{}) string {
	if orderID := orderMap["order_id"]; orderID != nil {
		if tryOrderID, ok := orderID.(string); ok {
			return tryOrderID
		}
		return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
	}
	return ""
}
