package model

import (
	"fmt"

	"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
	"git.rosy.net.cn/baseapi/platformapi/jdapi"
	"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
	"git.rosy.net.cn/jx-callback/globals"
)

var (
	PurchaseVendorInfo = map[int]map[string]interface{}{
		VendorIDJD: map[string]interface{}{
			"chineseName":               VendorChineseNames[VendorIDJD],
			"userApplyCancelWaitMinute": jdapi.UserApplyCancelWaitMinute,
		},
		VendorIDMTWM: map[string]interface{}{
			"chineseName":               VendorChineseNames[VendorIDMTWM],
			"userApplyCancelWaitMinute": mtwmapi.UserApplyCancelWaitMinute,
		},
		VendorIDEBAI: map[string]interface{}{
			"chineseName":               VendorChineseNames[VendorIDEBAI],
			"userApplyCancelWaitMinute": ebaiapi.UserApplyCancelWaitMinute,
		},
	}

	ShopChineseNames = map[int]string{
		VendorIDJD:           globals.StoreName,
		VendorIDMTWM:         globals.StoreNameMtwm,
		VendorIDTaoVegetable: globals.StoreNameTao,
		VendorIDELM:          globals.StoreNameEbai,
		VendorIDEBAI:         globals.StoreNameEbai,
		VendorIDJX:           fmt.Sprintf("%s商城", globals.StoreName),
		VendorIDWSC:          "微盟微商城",
	}

	OrderStatusName = map[int]string{
		OrderStatusMsg:                  "通知消息",
		OrderStatusWaybillTipChanged:    "小费变动",
		OrderStatusRefuseFailedGetGoods: "取货失败审核驳回",
		OrderStatusAdjust:               "订单调整完成",
		OrderStatusApplyUrgeOrder:       "催单",

		OrderStatusUnlocked: "解锁",
		OrderStatusLocked:   "锁定",
		// OrderStatusApplyRefund:    "申请退款",
		OrderStatusUndoApplyCancel:    "取消申请取消",
		OrderStatusVendorRejectCancel: "拒绝取消",
		OrderStatusVendorAgreeCancel:  "同意取消",
		OrderStatusApplyCancel:        "申请取消",

		OrderStatusUnknown: "一般事件",

		OrderStatusWait4Pay:            "待付款",
		OrderStatusNew:                 "新订单",
		OrderStatusWaitAccepted:        "待接单",
		OrderStatusAccepted:            "待拣货",
		OrderStatusFinishedPickup:      "待配送",
		OrderStatusApplyFailedGetGoods: "取货失败待审核",
		OrderStatusAgreeFailedGetGoods: "取货失败",
		OrderStatusDelivering:          "配送中",
		OrderStatusDeliverFailed:       "投递失败",
		OrderStatusFinished:            "完成",
		OrderStatusCanceled:            "取消",

		AfsOrderStatusWait4Approve:      "待审核",
		AfsOrderStatusNew:               "已审核",
		AfsOrderStatusWait4ReceiveGoods: "退货待确认",
		AfsOrderStatusReceivedGoods:     "退货已收到",
		AfsOrderStatusFinished:          "售后成功",
		AfsOrderStatusFailed:            "售后失败",
	}
	WaybillStatusName = map[int]string{
		WaybillStatusUnknown: "一般事件",

		WaybillStatusNew:                  "新运单",
		WaybillStatusPending:              "压单",
		WaybillStatusAcceptCanceled:       "取消接受",
		WaybillStatusAccepted:             "已接单",
		WaybillStatusCourierAssigned:      "已分配骑手",
		WaybillStatusCourierArrived:       "已到店",
		WaybillStatusUuPickUp:             "骑手已取件",
		WaybillStatusUuArrivedDestination: "骑手已到达取件人地址处",
		WaybillStatusApplyFailedGetGoods:  "取货失败待审核",
		WaybillStatusAgreeFailedGetGoods:  "取货失败",
		WaybillStatusDelivering:           "配送中",
		WaybillStatusDeliverFailed:        "投递失败",
		WaybillStatusDelivered:            "送达",
		WaybillStatusCanceled:             "取消",
		WaybillStatusFailed:               "失败",
	}
	OrderTypeName = map[int]string{
		OrderTypeOrder:    "订单",
		OrderTypeWaybill:  "运单",
		OrderTypeAfsOrder: "售后单",
	}

	ComplaintReasons = map[int]string{
		ComplaintReasons1:  "骑手态度恶劣",
		ComplaintReasons2:  "骑手接单后未取货",
		ComplaintReasons3:  "骑手取货太慢",
		ComplaintReasons4:  "骑手送货太慢",
		ComplaintReasons5:  "货品未送达",
		ComplaintReasons6:  "货品有损坏",
		ComplaintReasons7:  "骑手违规收取顾客其他费用",
		ComplaintReasons69: "骑手恶意取消订单",
		ComplaintReasons71: "骑手提前点击取货/送达",
	}

	SupplementTypeName = map[int]string{
		BadAppraiseSupplement: "差评退款",
		Coupon:                "优惠券",
	}

	OperateTypeName = map[int]string{
		OperateAdd:    "新增",
		OperateUpdate: "修改",
		OperateDelete: "删除",
		// OperateCopyStoreSkus: "复制门店商品",
	}

	ThingTypeName = map[int]string{
		ThingTypeCategory: "分类",
		ThingTypeSku:      "门店商品",
		ThingTypeSkuName:  "商品库",
		ThingTypeStore:    "门店",
	}

	ApiFunctionName = map[string]string{
		"UpdateStoresSkus":      "门店商品管理",
		"UpdateStoresSkusSale":  "门店商品可售状态修改",
		"CopyStoreSkus":         "京西门店商品复制到京西",
		"UpdateStore":           "门店管理-更新门店信息",
		"CreateStore":           "门店管理-创建门店",
		"DeleteStore":           "门店管理-删除门店",
		"DeleteStoreVendorMap":  "门店解绑",
		"AddStoreVendorMap":     "门店绑定",
		"UpdateStoreVendorMap":  "门店修改平台绑定信息",
		"DeleteStoreCourierMap": "门店解绑三方配送平台",
		"AddStoreCourierMap":    "门店绑定三方配送平台",
		"UpdateStoreCourierMap": "门店修改三方配送平台绑定信息",
		"Login":                 "登录",
		"RegisterUser":          "注册",
		"AutoPayForPopluarMan":  "每日订单打款",
		"SyncStoresQualify":     "上传门店营业资质",
		"CancelOrder":           "取消订单",
		"UpdateSku":             "修改sku",
		"UpdateSkuName":         "修改skuName",
	}

	MultiStoresVendorMap = map[int]int{
		VendorIDJD:           1,
		VendorIDMTWM:         0,
		VendorIDELM:          0,
		VendorIDEBAI:         0,
		VendorIDDD:           0,
		VendorIDTaoVegetable: 0,
	}

	ZXCityCodeMap = map[int]string{
		310100: "上海市",
		110100: "北京市",
		120100: "天津市",
		440300: "深圳市",
		500100: "重庆市",
		441900: "东莞",
	}

	PrinterVendorInfo = map[int][]string{
		VendorIDFeiE: []string{
			VendorChineseNames[VendorIDFeiE],
			"序列号",
			"KEY",
		},
		VendorIDXiaoWM: []string{
			VendorChineseNames[VendorIDXiaoWM],
			"打印机编号",
			"不填",
		},
		VendorIDYiLianYun: []string{
			VendorChineseNames[VendorIDYiLianYun],
			"终端号",
			"密钥",
		},
		VendorIDZhongWu: []string{
			VendorChineseNames[VendorIDZhongWu],
			"打印机ID",
			"打印机密钥",
		},
		VendorIDJxprint: []string{
			VendorChineseNames[VendorIDJxprint],
			"打印机编号",
			"密钥",
		},
		VendorIDXpYun: []string{
			VendorChineseNames[VendorIDXpYun],
			"打印机编号",
			"不填",
		},
		VendorIDTrendIT: []string{
			VendorChineseNames[VendorIDTrendIT],
			"打印机编号",
			"打印机密钥",
		},
	}
	AfsReasonTypeName = map[int]string{
		AfsReasonTypeGoodsQuality:  "商品质量",
		AfsReasonTypeWrongGoods:    "错误的商品",
		AfsReasonTypeMissingGoods:  "缺少部分商品",
		AfsReasonTypeNoGoods:       "全部商品未收到",
		AfsReasonTypeDamagedGoods:  "商品有损伤",
		AfsReasonTypeGoodsQuantity: "缺斤少两",
		AfsReasonTypeGoodsAbsent:   "商家通知我缺货",
		AfsReasonTypeGoodsNoSame:   "商品与描述不符",
		AfsReasonWrongPurchase:     "误购",
		AfsReasonNotReceivedIntime: "未在时效内送达",
		AfsReasonNotOthers:         "其它",
	}
	AfsAppealTypeName = map[int]string{
		AfsAppealTypeRefund:          "仅退款",
		AfsAppealTypeReturnAndRefund: "退款",  // 这个其实是退货退款，强制显示成退款
		AfsAppealTypeNewGoods:        "退款.", // 这个其实是重发商品，强制显示成退款
	}
	VendorStatus = map[int]string{
		0: "休息",
		1: "营业",
	}
)

const (
	OrderTypeOrder         = 1 // 新订单
	OrderTypeWaybill       = 2 // 运单
	OrderTypeAfsOrder      = 3 // 售后单
	OrderTypePrintAfsOrder = 4 // 售后打印
)

// https://blog.csdn.net/a13570320979/article/details/51366355
// 美团配送：
// 坐标类型，0：火星坐标（高德，腾讯地图均采用火星坐标） 1：百度坐标 （默认值为0）
// 京东：
// 收货人地址定位类型（buyerCoordType值为空或为1时，定位类型为gps，如为其他值时，定位类型为非gps类型。)
// 饿了么：
// 只支持高德坐标
// 达达：
// 只支持高德坐标
// 如下定义与美团配送兼容
const (
	CoordinateTypeMars   = 0 // 火星坐标，高德坐标，GCJ－02坐标系
	CoordinateTypeBaiDu  = 1 // 百度坐标，bd-09，在GCJ－02坐标系上再次偏移加密的坐标
	CoordinateTypeMapbar = 2
	CoordinateTypeGPS    = 84 // 真实坐标，WGS－84原始坐标系
)

const (
	OrderStatusMsg = -100

	OrderStatusWaybillTipChanged = -80 // 订单小费变化

	OrderStatusRefuseFailedGetGoods = -70 // 取货失败审核驳回
	OrderStatusAdjust               = -65 // 原值-35 订单调整完成
	OrderStatusApplyUrgeOrder       = -55 // 原值-15

	OrderStatusUnlocked             = -25
	OrderStatusLocked               = -20
	OrderStatusUndoApplyCancel      = -10
	OrderStatusVendorRejectCancel   = -7
	OrderStatusVendorAgreeCancel    = -6
	OrderStatusApplyCancel          = -5 // 发货前退款(取消)
	OrderStatusAfterShipmentCancel  = -4 // 发货后退款(取消)
	OrderStatusAfterReceivingCancel = -3 // 收货后退款(取消)

	OrderStatusUnknown          = 0
	OrderStatusWait4Pay         = 2  // 原值-60 下单待支付
	OrderStatusWaitAccepted     = 3  // 待接单，目前饿百用
	OrderStatusNew              = 5  // 新订单，实际是已经支付
	OrderStatusPartDeliverGoods = 6  // 部分发货
	OrderStatusPartPay          = 7  // 部分支付
	OrderStatusAccepted         = 10 // 已经接单，也即待出库，待拣货
	OrderStatusFinishedPickup   = 15 // 拣货完成

	OrderStatusWaitPay = 23 // 京西订单,等待支付
	OrderStatusPayFail = 24 // 京西订单,支付错误

	OrderStatusApplyFailedGetGoods = 17 // 取货失败待审核
	OrderStatusAgreeFailedGetGoods = 18 // 取货失败

	OrderStatusDelivering    = 20 // 开始配送，配送员已取货，从这里开始就是运单消息了
	OrderStatusDeliverFailed = 22 // 投递失败

	OrderStatusEndBegin = 100 // 以下的状态就是结束状态
	OrderStatusFinished = 110 // 订单已完成
	OrderStatusCanceled = 115 // 订单已取消
	OrderStatusEndEnd   = 120

	AfsOrderStatusWait4Approve        = 155 // 待审核售后单
	AfsOrderStatusCancelAfs           = 156 // 用户取消售后
	AfsOrderStatusOnSaleAfs           = 157 // 用户售中取消
	AfsOrderStatusNew                 = 160 // 已审核或不需要审核售后单
	AfsOrderStatusWait4ReceiveGoods   = 165 // 退款退货的，需要商家确认收到货
	AfsOrderStatusReceivedGoods       = 167 // 已确认收到货
	AfsOrderStatusReceivedArbitration = 170 // 仲裁
	AfsOrderStatusFinished            = 180 // 售后单成功完成
	AfsOrderStatusFailed              = 190 // 售后单失败
)

const (
	LockStatusUnlocked = 0
	LockStatusLocked   = 1
)

//投诉原因
const (
	ComplaintReasons1  = 1  //"骑手态度恶劣",
	ComplaintReasons2  = 2  //"骑手接单后未取货"
	ComplaintReasons3  = 3  //"骑手取货太慢",
	ComplaintReasons4  = 4  //"骑手送货太慢",
	ComplaintReasons5  = 5  //"货品未送达",
	ComplaintReasons6  = 6  //"货品有损坏",
	ComplaintReasons7  = 7  //"骑手违规收取顾客其他费用",
	ComplaintReasons69 = 69 //"骑手恶意取消订单",
	ComplaintReasons71 = 71 //"骑手提前点击取货/送达",
)

const (
	BadAppraiseSupplement = 1 //差评退款
	Coupon                = 2 //优惠券
)

const (
	OperateAdd           = 2 //新增操作
	OperateUpdate        = 1 //修改操作
	OperateDelete        = 4 //删除操作
	OperateCopyStoreSkus = 3 //复制门店商品
)

const (
	PrintTypeOrder   = "order"    // 京西云打印机:打印订单
	PrintTypeWayBill = "wayBill " // 京西云打印机:打印运单
	PrintTypeStore   = "store "   // 京西云打印机:门店下线
	PrintTypeEnter   = "enter"    // 京西云打印机:进店订单
	PrintAfsOrder    = "afs"      // 京西云打印机:售后
)

const (
	WaybillStatusRefuseFailedGetGoods = -70
	WaybillStatusUnknown              = 0

	WaybillStatusNew             = 5  // 新建订单
	WaybillStatusPending         = 7  //
	WaybillStatusAcceptCanceled  = 8  // 取消运单
	WaybillStatusAccepted        = 10 // 分配骑手,正在接单
	WaybillStatusCourierAssigned = 12 // 已分配骑手
	WaybillStatusCourierArrived  = 15 // 此状态是可选的，明确写出来是因为还是较重要的状态，但业务逻辑不应依赖此状态 (到店)

	WaybillStatusApplyFailedGetGoods = 17 // 取货失败待审核
	WaybillStatusAgreeFailedGetGoods = 18 // 取货失败

	WaybillStatusDelivering    = 20 // 配送中
	WaybillStatusDeliverFailed = 22 // 配送中失败
	//uu跑腿专用
	WaybillStatusUuPickUp             = 13 //骑手已取件
	WaybillStatusUuArrivedDestination = 26 //骑手到达收件人地址，暂未确定收货
	//抖音配送专用
	WaybillStatusRejected  = 23 //收货人拒收
	WaybillStatusReturning = 24 //返回中
	WaybillStatusReturned  = 25 //已返回

	WaybillStatusEndBegin  = 100 // 以下的状态就是结束状态
	WaybillStatusDelivered = 105 // todo 这个应该改为110，与订单对应
	WaybillStatusCanceled  = 115
	WaybillStatusFailed    = 120 // 这个状态存在的意义是区分于WaybillStatusCanceled，比如达达平台在这种状态下再次创建运单的方式不一样
	WaybillStatusEndEnd    = 120

	WaybillStatusCancel = 1150 // 115为取消,但是分不清是商户取消还是骑手取消!1150标志着商户取消记录
)

const (
	RiderGetOrder           = "骑手 %s (%s) 已接单"
	RiderToStore            = "骑手 %s (%s) 已到店"
	RiderGetOrderDelivering = "骑手 %s (%s) 配送中"
	RiderGetOrderDelivered  = "骑手 %s (%s) 已送达"
	RiderGetOrderCanceled   = "骑手 %s (%s) 已取消"
	//uu专用
	RiderPickUp             = "骑手 %s (%s) 已取件"
	RiderArrivedDestination = "骑手 %s (%s) 已到达收件人地址处"

	RiderGetOrderDeliverFailed = "骑手配送异常"
	RiderGetOrderDeliverOther  = "其他待处理信息"
	RiderWaitRider             = "待接单,正在分配骑手"
	RiderWaitGetGoods          = "骑手 %s (%s) 已接单"
)

const (
	BusinessTypeImmediate = 1 // 定时单
	BusinessTypeDingshida = 2 // 预订单
)

const (
	PhoneAscriptionAddressYes = "YES" // 抖音订单收货地址和电话号码归属地是否一致
	PhoneAscriptionAddressNo  = "No"  // 抖音订单收货地址和电话号码归属地是否一致
)

var (
	ElmSkuPromotion = map[int]int{
		11:  1,
		200: 1,
	}
)

const (
	JdPlatformFeeRate = 10
	MtPlatformFeeRate = 10
)

const (
	OrderDeliveryFlagMaskScheduleDisabled = 1 // 禁止三方配送调度
	OrderDeliveryFlagMaskPurcahseDisabled = 2 // 购物平台已不配送（一般为门店配送类型本身为自配送，或已经转自配送）

	OrderDeliveryFlagMaskAutoPickup = 4 // 是否是自动拣货的

	OrderDeliveryFlagMaskDada = 16 // 创建达达运单中
	OrderDeliveryFlagMaskMtps = 32 // 创建美团配送运单中
	OrderDeliveryFlagMaskDYPS = 48 //创建抖音运力配送中
)

const (
	WaybillDeliveryFlagMaskActiveCancel = 1 // 主动取消
)

const (
	OrderFlagMaskPrinted = 1 // 已经打印

	OrderFlagMaskUserApplyCancel   = 6
	OrderFlagAgreeUserApplyCancel  = 2
	OrderFlagRefuseUserApplyCancel = 6

	OrderFlagMaskFailedGetGoods   = 24
	OrderFlagAgreeFailedGetGoods  = 8
	OrderFlagRefuseFailedGetGoods = 24

	OrderFlagMaskFailedDeliver = 32
	OrderFlagMaskCallPMCourier = 64  // 取货失败后召唤平台配送
	OrderFlagMaskSetDelivered  = 128 // 设置送达

	OrderFlagMaskFake   = 256 // 假订单，即刷单用的
	OrderFlagMaskTempJX = 512 // 临时京西订单
)

const (
	AfsOrderFlagMaskUserRefund   = 3 // 门店处理售后单申请
	AfsOrderFlagAgreeUserRefund  = 1 // 门店同意售后单申请
	AfsOrderFlagRefuseUserRefund = 3 // 门店拒绝售后单申请

	AfsOrderFlagMaskReturnGoods = 4 // 门店确认收到退货
)

const (
	AfsAppealTypeRefund          = 1 // 仅退款
	AfsAppealTypeReturnAndRefund = 2 // 退货退款
	AfsAppealTypeNewGoods        = 3 // 重发新商品（即京东到家的直赔）
	// 新补
	AfsAppealTypeSendPkgOnlyReturnMoney = 4  // 已发货仅退款
	AfsAppealTypeReturnMoney            = 5  // 未发货仅退款
	AfsAppealTypeChangePkg              = 6  // 换货
	AfsAppealTypeSystemCancel           = 7  // 系统取消
	AfsAppealTypeUserCancel             = 8  // 用户取消
	AfsAppealTypeInsuredPrice           = 9  // 价保
	AfsAppealTypeReissue                = 10 // 补寄
)

const (
	AfsReasonTypeGoodsQuality  = 1  // 商品质量
	AfsReasonTypeWrongGoods    = 2  // 错误的商品
	AfsReasonTypeMissingGoods  = 3  // 缺少部分商品
	AfsReasonTypeNoGoods       = 4  // 全部商品未收到
	AfsReasonTypeDamagedGoods  = 5  // 商品有损伤
	AfsReasonTypeGoodsQuantity = 6  // 缺斤少两
	AfsReasonTypeGoodsAbsent   = 7  // 商家通知缺货
	AfsReasonTypeGoodsNoSame   = 8  // 商品与描述不符
	AfsReasonWrongPurchase     = 9  // 误购
	AfsReasonNotReceivedIntime = 10 // 未在时效内送达
	AfsReasonNotOthers         = 0  // 其它
)

const (
	AfsTypeUnknown    = 0 // 未知
	AfsTypePartRefund = 1 // 部分退款
	AfsTypeFullRefund = 2 // 全额退款
)

const (
	DefaultEarningPricePercentage = 70 // 门店缺省结算百分比

	MinVendorPricePercentage = 10
	DefVendorPricePercentage = 100 // 平台缺省调价比例
	MaxVendorPricePercentage = 400
)

const (
	YES                 = 1 //通用
	NO                  = 0
	DISABLED            = -1
	B2BTag              = "B2B"
	B2BNumberId         = 10
	ServerTypeVegetable = "prod"
	ServerTypeFruits    = "jxgy"
	ServerTypePet       = "jxpet"
)

const (
	DefaultName          = "石锋"
	DefaultPhone         = "18048531223"
	DefaultUserIdCaiShi  = "DDC5657B43EE11E9A9FF525400E86DC0"
	DefaultUserIdGuoYuan = "08B71CB5671D11E9943E525400E86DC0"
	DefaultIdCard        = "610126198012230014"
)

func IsPurchaseVendorExist(vendorID int) bool {
	_, ok := VendorNames[vendorID]
	return ok && vendorID >= VendorIDPurchaseBegin && vendorID <= VendorIDPurchaseEnd
}

func IsDeliveryVendorExist(vendorID int) bool {
	_, ok := VendorNames[vendorID]
	return ok && vendorID >= VendorIDDeliveryBegin && vendorID <= VendorIDDeliveryEnd
}

func IsPrinterVendorExist(vendorID int) bool {
	_, ok := VendorNames[vendorID]
	return ok && vendorID >= VendorIDPrinterBegin && vendorID <= VendorIDPrinterEnd
}

func IsImVendorExist(vendorID int) bool {
	_, ok := VendorNames[vendorID]
	return ok && vendorID >= VendorIDPurchaseBegin && vendorID <= VendorIDPurchaseEnd
}

func IsOrderLockStatus(status int) bool {
	return status == OrderStatusLocked || status == OrderStatusApplyCancel
}

func IsOrderUnlockStatus(status int) bool {
	return status == OrderStatusUnlocked || status == OrderStatusUndoApplyCancel || status == OrderStatusVendorAgreeCancel || status == OrderStatusVendorRejectCancel
}

func IsOrderMainStatus(status int) bool {
	return status > OrderStatusUnknown
}

func IsOrderFinalStatus(status int) bool {
	return status >= OrderStatusEndBegin && status <= OrderStatusEndEnd
}

func IsOrderImportantStatus(status int) bool {
	return IsOrderMainStatus(status) || IsOrderLockStatus(status) || IsOrderUnlockStatus(status)
}

func IsVendorRemote(vendorID int) bool {
	return vendorID >= VendorIDJD && vendorID <= VendorIDEBAI
}

func WaybillVendorID2Mask(vendorID int) (mask int8) {
	if vendorID == VendorIDDada {
		mask = OrderDeliveryFlagMaskDada
	} else if vendorID == VendorIDMTPS {
		mask = OrderDeliveryFlagMaskMtps
	}
	//else if vendorID == VendorIDDYPS {
	//	mask = OrderDeliveryFlagMaskDYPS
	//}
	return mask
}

func IsAfsOrderFinalStatus(status int) bool {
	return status >= AfsOrderStatusFinished && status <= AfsOrderStatusFailed
}

func IsWaybillFinalStatus(status int) bool {
	return status >= WaybillStatusEndBegin && status <= WaybillStatusEndEnd
}

const (
	JXC4AppId         = "wx4b5930c13f8b1170"   // 京西菜市appId type=weixinmini
	JXC4BusinessAppId = "wx08a5c2a8581414ff"   // 京西商家appId type=weixinmini
	JXC4TiktokAppId   = "ttaceeda5333d7a7ab01" // 抖音appID

	JXC4ClientAppID = "wxf3657c94aa01a3f0" //京西菜市客户端APP ID type="weixinapp"

)
