package jdapi

import (
	"git.rosy.net.cn/baseapi/utils"
	"time"
)

// ReceiveLogisticInfoForOpenApiPlatform 京东商家自配送同步骑手状态
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=e6feb2ab829e4aa7963bacd04d9434b2
func (a *API) ReceiveLogisticInfoForOpenApiPlatform(parma ReceiveLogisticInfo) (err error) {
	jdParams := utils.Struct2Map(parma, "", false)
	_, err = a.AccessAPINoPage("ThirdPartyLogisticsService/receiveLogisticInfosForOpenApiPlatform", jdParams, nil, nil, nullResultParser)
	return err
}

// ReceiveLogisticInfo 自配送骑手状态通知
type ReceiveLogisticInfo struct {
	OrderId          string         `json:"orderId"`          // 到家订单号
	DeliveryInfoList []DeliveryInfo `json:"deliveryInfoList"` // 物流配送信息，仅支持传入单个元素，如传入多个元素底层服务获取第一个
}

// DeliveryInfo 物流配送信息，仅支持传入单个元素，如传入多个元素底层服务获取第一个
type DeliveryInfo struct {
	DeliveryStatus         string `json:"deliveryStatus"`         // 配送状态，10010-待接单，10020-配送员接单，10022-更换配送员，10023-配送员已到店，10025-取货失败，10030-配送员已取货【接单、更换骑手、骑手到店、骑手取货 都需要填加：骑手姓名和电话】
	DeliveryManName        string `json:"deliveryManName"`        // 配送员姓名
	DeliveryManPhone       string `json:"deliveryManPhone"`       // 配送员手机号
	DeliveryCarrierNo      string `json:"deliveryCarrierNo"`      // 承运商编号
	DeliveryCarrierOrderNo string `json:"deliveryCarrierOrderNo"` // 运单号
	DeliveryCarrierName    string `json:"deliveryCarrierName"`    // 承运商名称
	FailReason             string `json:"failReason"`             // 失败原因
	OperateTime            string `json:"operateTime"`            // 操作时间格式【yyy-MM-dd HH:mm:ss】
	Operator               string `json:"operator"`               // 操作人
}

const (
	JdDeliveryStatusNew         = "10010" // 待接单
	JdDeliveryStatusRiderTaking = "10020" // 接单
	JdDeliveryStatusChangeRider = "10022" // 更换配送员
	JdDeliveryStatusToStore     = "10023" // 到店
	JdDeliveryStatusFail        = "10025" // 取货失败
	JdDeliveryStatusDelivering  = "10030" // 配送中
)

// SelfDeliveryUploadCoordinate 自配送更新骑手坐标
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=194&apiid=2dd3e02df53c44d7bd098508b9bb5c41
func (a *API) SelfDeliveryUploadCoordinate(orderId int64, latitude, longitude, operateUser string) (err error) {
	jdParams := map[string]interface{}{
		"orderId":     orderId,     // 订单ID
		"latitude":    latitude,    // 纬度
		"longitude":   longitude,   // 经度
		"operateUser": operateUser, // 操作人
		"uploadDate":  time.Now(),  // 操作时间
	}

	_, err = a.AccessAPINoPage("OrderLogisticsOpenService/syncLogisticsMessage", jdParams, nil, nil, genNoPageResultParser("code", "msg", "", "0"))

	return err
}
