package delivery

import (
	"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
	"git.rosy.net.cn/baseapi/utils"
	"git.rosy.net.cn/jx-callback/business/model"
	"git.rosy.net.cn/jx-callback/business/model/dao"
	"git.rosy.net.cn/jx-callback/business/partner"
	"git.rosy.net.cn/jx-callback/globals"
	"time"
)

// 订单骑手信息推送:将获取到的三方配送订单,且订单状态为配送中的订单,将配送人员的信息返回给订单方
// 该方法为定时任务,没五分钟推送一次订单消息,订单状态发生变化时
//配送状态code，如下提供配送状态枚举值，
//以及各配送状态对应在C端（用户端）和B端（商家PC端）后台展示的配送状态信息。
//未同步配送状态时（C端：商家已接单；B端：待发配送）
//0-配送单发往配送（C端：商家已接单；B端：待骑手接单）
//1-已创建配送包裹（C端：商家已接单；B端：待骑手接单）
//5-已分配骑手（C端：商家已接单；B端：已分配骑手）
//10-骑手已接单（C端：骑手正在赶往商家；B端：待骑手取货）
//15-骑手已到店（C端：骑手到店取货中；B端：骑手已到店）
//20-骑手已取货（C端：商品配送中/骑手正在送货；B端：骑手已取货）
//40-骑手已送达（C端：商品已送达；B端：骑手已送达）
//100-配送单已取消（C端：商家已接单；B端：配送已取消）
//注：若同步配送状态为“配送单已取消”，接口仍支持继续同步配送状态。 说明：商家如未上传此信息，则平台默认值为20（现已要求必传）。
func GetOrderRiderInfoToPlatform(orderId string) {
	params := make(map[string]interface{}, 0)
	params["isDateFinish"] = false
	params["isIncludeFake"] = true
	params["mustInvoice"] = false
	params["adjustCount"] = 0
	params["waybillVendorIDs"] = `[101,102,103]`
	if orderId != "" { // 订单id会忽略其他参数
		params["keyword"] = orderId
	} else {
		params["statuss"] = "[20]"
	}

	// 每五分钟查询当前订单信息，待配送状态订单1
	orders, _, err := dao.GetOrders(dao.GetDB(), nil, false, true, time.Now().Add(-24*time.Hour).Format("2006-01-02"), time.Now().Format("2006-01-02"), false, nil, false, "", params, 0, 10000)
	if err != nil {
		globals.SugarLogger.Errorf("GetOrder err :%v", err)
		return
	}

	//1.此接口用于同步自配送商家自配订单（除在B2C清单中的商家）的配送信息，包括物流平台、骑手名称、骑手电话，且此配送信息会同步展示在用户端订单详情的“配送信息”中。
	//（注：美团跑腿订单的配送信息，平台会自动回流，无需商家再同步。自配的配送信息目前只能在用户端查询，不支持在商家端查询
	//2.从订单状态为“商家已确认”(status=4)到“订单已完成”(status=8)后的24小时之内，均可使用此接口创建和更新配送信息。
	//3.当同一个订单已经上传了一次配送信息，如再次同步会更新配送信息，以最新的一次为准。
	//4.如订单已完成、已取消等状态发货将失败。
	for _, v := range orders {
		if v.Status < 20 {
			continue
		}
		riderInfo := &mtpsapi.RiderInfo{}
		if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil {
			if v.WaybillVendorID == model.VendorIDDada || v.WaybillVendorID == model.VendorIDFengNiao {
				riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, 0, v.VendorWaybillID)
				if err != nil {
					globals.SugarLogger.Debug("Get Order waybill rider info err FN/DADA :%v", err)
				}
			} else if v.WaybillVendorID == model.VendorIDMTPS {
				if v.VendorWaybillID != "" {
					riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, v.ID+1000000, v.VendorWaybillID)
					if err != nil {
						globals.SugarLogger.Debug("Get Order waybill rider info err MT:%v", err)
					}
				}
			}
		}
		if riderInfo.CourierName == "" && v.WaybillVendorID == -1 && v.DeliveryType == "store"{ // 真商家自送
			riderInfo.OrderId = v.VendorOrderID
			riderInfo.LogisticsStatus = v.Status
			riderInfo.CourierName = "石锋"
			riderInfo.CourierPhone = "18048531223"
			riderInfo.LogisticsProviderCode = "10017"
			globals.SugarLogger.Debug("同步外卖骑手位置信息到美团失败，未获取到订单的骑手信息:", "----")
		}


		riderInfo.ThirdCarrierOrderId = v.VendorWaybillID
		switch riderInfo.LogisticsStatus {
		case 20: //配送中
			riderInfo.LogisticsStatus = 20
		case 110: // 完成
			riderInfo.LogisticsStatus = 40
		case 105: // 完成
			riderInfo.LogisticsStatus = 40
		case 115: // 取消
			riderInfo.LogisticsStatus = 100
		default:
			continue
		}
		if riderInfo.Longitude == "" {
			riderInfo.Longitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLng) / 1000000)
		}
		if riderInfo.Latitude == "" {
			riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000)
		}
		// 目前只推送美团骑手信息
		switch v.VendorID {
		case model.VendorIDMTWM: // 美团发单
			paramsMap := utils.Struct2Map(riderInfo, "", true)
			if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
				if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, paramsMap); err != nil {
					globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err)
				}
			}
		case model.VendorIDELM: // 饿了么
		case model.VendorIDEBAI: // 饿百发单

		case model.VendorIDJD: // 京东发单
		case model.VendorIDGD: // 美团发单
		case model.VendorIDYB: // 银豹发单
		case model.VendorIDJDShop: // 京东商城
		case model.VendorIDWSC: // 微盟微商城
		default:
			globals.SugarLogger.Errorf("Order source error, non system order")
			return
		}
	}
	return
}

//将以过期订单状态为配送中的订单修改为完成状态
func UpdateOrder2Complete() {
	sql := `UPDATE goods_order g SET  g.status=110 WHERE g.status=20  AND g.order_created_at < ?`
	sqlParams := []interface{}{
		time.Now().AddDate(0, 1, 0),
	}
	if num, err := dao.ExecuteSQL(dao.GetDB(), sql, sqlParams); err != nil {
		globals.SugarLogger.Errorf("Update Order Status 20 To 110 Fail")
		globals.SugarLogger.Debug("Update Order Status 20 To 110 Time,Count", time.Now(), num)
	}
	return
}
