package xpyunapi

const (
	//http返回成功状态码
	HttpStatusSuccessCode = 200
	//响应状态码
	REQUEST_HEADER_ERROR      = -1 //	请求头错误
	REQUEST_PARAM_INVALID     = -2 //参数不合法
	REQUEST_SIGN_FAILED       = -3 //参数签名失败
	REQUEST_USER_NOT_REGISTER = -4 //用户未注册

	SN_USER_NOT_MATCH                 = 1001 //打印机编号和用户不匹配
	PRINTER_NOT_REGISTER              = 1002 //打印机未注册
	PRINTER_OFFLINE                   = 1003 //打印机不在线
	ADD_ORDER_FAILED                  = 1004 //添加订单失败
	ORDER_NOT_FOUND                   = 1005 //未找到订单信息
	ORDER_DATE_INVALID                = 1006 //订单日期格式或大小不正确
	PRINT_CONTENT_MORE_THAN_12K_BYTES = 1007 //打印内容不能超过12K
	PRINTER_RECORD_LOCK_FAIL          = 1008 //用户修改打印机记录失败
	SN_OR_NAME_EMPTY                  = 1009 //	用户添加打印机时，打印机编号或名称不能为空
	PRINTER_NUMBER_INVALID            = 1010 //打印机设备编号无效
	PRINTER_EXIST                     = 1011 //打印机已存在，若当前开放平台无法查询到打印机信息，请联系售后技术支持人员核实
	PRINTER_EXCEPTION                 = 1012 //添加打印设备失败，请稍后再试或联系售后技术支持人员
	ORDER_IDEMPOTENT                  = 1013 //打印订单时触发幂等性
	ORDER_IDEMPOTENT_LIMITLEN         = 1014 //幂等因子过长
	LOGO_FORMAT_ERROR                 = 1016 //LOGO文件格式错误
	LOGO_SIZE_LARGE                   = 1017 //LOGO文件超出规定范围
	LOGO_UPLOAD_TIMES                 = 1018 //LOGO上传次数超限制
	LOGO_DELETE_NO_EXIST              = 1020 //	LOGO删除失败
	LABEL_MODE_ERROR                  = 1021 //LOGO上传模式错误
)

var XpuErrMsg2 = map[string]string{
	"REQUEST_HEADER_ERROR":              "请求头错误",
	"REQUEST_PARAM_INVALID":             "参数不合法",
	"REQUEST_SIGN_FAILED":               "参数签名失败",
	"REQUEST_USER_NOT_REGISTER":         "用户未注册",
	"SN_USER_NOT_MATCH":                 "打印机编号和用户不匹配",
	"PRINTER_NOT_REGISTER":              "打印机未注册",
	"PRINTER_OFFLINE":                   "打印机不在线",
	"ADD_ORDER_FAILED":                  "添加订单失败",
	"ORDER_NOT_FOUND":                   "未找到订单信息",
	"ORDER_DATE_INVALID":                "订单日期格式或大小不正确",
	"PRINT_CONTENT_MORE_THAN_12K_BYTES": "打印内容不能超过12K",
	"PRINTER_RECORD_LOCK_FAIL":          "用户修改打印机记录失败",
	"SN_OR_NAME_EMPTY":                  "用户添加打印机时，打印机编号或名称不能为空",
	"PRINTER_NUMBER_INVALID":            "打印机设备编号无效",
	"PRINTER_EXIST":                     "打印机已存在",
	"PRINTER_EXCEPTION":                 "添加打印设备失败",
	"ORDER_IDEMPOTENT":                  "打印订单时触发幂等性",
	"ORDER_IDEMPOTENT_LIMITLEN":         "幂等因子过长",
	"LOGO_FORMAT_ERROR":                 "LOGO文件格式错误",
	"LOGO_SIZE_LARGE":                   "LOGO文件超出规定范围",
	"LOGO_UPLOAD_TIMES":                 "LOGO上传次数超限制",
	"LOGO_DELETE_NO_EXIST":              "LOGO删除失败",
	"LABEL_MODE_ERROR":                  "LOGO上传模式错误",
}
var XpuErrMsg = map[string]string{
	"1001": "打印机编号和用户不匹配",
	"1002": "打印机未注册,尚未添加至云平台",
	"1003": "打印机不在线",
	"1004": "添加订单失败",
	"1005": "未找到订单信息",
	"1006": "订单日期格式或大小不正确",
	"1007": "打印内容不能超过12K",
	"1008": "用户修改打印机记录失败",
	"1009": "用户添加打印机时，打印机编号或名称不能为空",
	"1010": "打印机设备编号无效",
	"1011": "打印机已存在",
	"1012": "添加打印设备失败",
	"1013": "打印订单时触发幂等性",
	"1014": "幂等因子过长",
	"1016": "LOGO文件格式错误",
	"1017": "LOGO文件超出规定范围",
	"1018": "LOGO上传次数超限制",
	"1020": "LOGO删除失败",
	"1021": "LOGO上传模式错误",
}

const (
	//声音类型 v10版本
	VoiceTypeV10PersonBig    = 0 //真人语音 大
	VoiceTypeV10PersonMedium = 1 //真人语音 中
	VoiceTypeV10PersonSmall  = 2 //真人语音 小
	VoiceTypeV10DiDi         = 3 //滴滴声
	VoiceTypeV10Mute         = 4 //静音

	//声音类型 其他固件版本
	VoiceTypeOtherPerson = 0 //真人语音
	VoiceTypeOtherDiDi   = 3 //滴滴声
	VoiceTypeOtherMute   = 4 //静音

	//声音大小，打印机固件版本为非V10.xx的机器支持此参数
	VolumeLevelBig    = 0 //大
	VolumeLevelMedium = 1 //中
	VolumeLevelSmall  = 2 //小
	VolumeLevelClose  = 3 //关闭

	//切刀控制开关,默认为0,仅用于支持切刀的芯烨云打印机
	CutterOpen  = 0 //开启云端默认设置控制切刀
	CutterClose = 1 //关闭云端切刀

	//声音播放模式:0-取消订单模式,1-静音模式,2-来单播放模式(默认),3-播报退单语音，4-播报美团来单语音，5-播报饿了么来单语音
	VoiceCancelOrder    = 0 //取消订单模式
	VoiceMute           = 1 //静音模式
	VoicePlayOrder      = 2 //来单播放模式
	VoiceUserChargeback = 3 //用户申请退单模式
	VoiceMT             = 4 //播报美团来单语音
	VoiceELM            = 5 //播报饿了么来单语音

	//打印模式 默认0
	ModeCheckYes = 1 //不检查打印机是否在线，直接生成打印订单，并返回打印订单号。如果打印机不在线，订单将缓存在打印队列中，打印机正常在线时会自动打印
	ModeCheckNo  = 0 //或不指定则会检查打印机是否在线,如果不在线 则不生成打印订单，直接返回设备不在线状态码；如果在线则生成打印订单，并返回打印订单号
	//默认订单过期时间
	ExpiresInDefault = 86399 //秒
	//支付方式41-55
	PayTypeZFB              = 41 //支付宝
	PayTypeWX               = 42 //微信
	PayTypeYunZF            = 43 //云支付
	PayTypeYLCard           = 44 //银联刷卡
	PayTypeYLPay            = 45 //银联支付
	PayTypeMemberCardPay    = 46 //会员卡消费
	PayTypeMemberCardCharge = 47 //会员卡充值
	PayTypeYiZF             = 48 //翼支付
	PayTypePaymentSuccess   = 49 //成功收款
	PayTypeJLZF             = 50 //嘉联支付
	PayTypeYQB              = 51 //壹钱包
	PayTypeJDZF             = 52 //京东支付
	PayTypeKQZF             = 53 //快钱支付
	PayTypeWZF              = 54 //威支付
	PayTypeXQZF             = 55 //享钱支付

	//支付与否
	PayModeDrawback = 59 //退款
	PayModeReceipt  = 60 //到账
	PayModeConsume  = 61 //消费

	//打印机状态
	PrinterStateOffline       = 0  //离线
	PrinterStateOnlineNormal  = 1  //在线正常
	PrinterStateOnlineUnusual = 2  //在线异常
	PrinterStateError         = -1 //获取状态出错

)

var (
	//打印机状态说明
	PrinterStatus = map[float64]string{
		PrinterStateOffline:       "离线",
		PrinterStateOnlineNormal:  "在线正常",
		PrinterStateOnlineUnusual: "在线异常",
		PrinterStateError:         "获取状态出错",
	}
)

//请求参数
type RestRequest struct {
	User      string `json:"user"`      //开发者ID(芯烨云后台登录账号）
	UserKey   string `json:"-"`         //芯烨云后台开发者密钥
	Timestamp int64  `json:"timestamp"` //当前UNIX时间戳，10位，精确到秒
	Sign      string `json:"sign"`      //对参数 user + UKEY + timestamp 拼接后（+号表示连接符）进行SHA1加密得到签名，值为40位小写字符串
	Debug     int    `json:"debug"`     //debug=1返回非json格式的数据。仅测试时候使用
}

//响应参数
type XPYunResp struct {
	HttpStatusCode int               `json:"httpStatusCode"`
	Content        *XPYunRespContent `json:"content"`
}
type XPYunRespContent struct {
	Code               int         `json:"code"`
	Msg                string      `json:"msg"`
	Data               interface{} `json:"data,omitempty"`
	ServerExecutedTime int         `json:"serverExecutedTime"`
}

type AddPrinterRequestItem struct {
	Sn   string `json:"sn"`             //打印机编号
	Name string `json:"name,omitempty"` //打印机名称
}

// 添加打印机到开发者账户（可批量）
type AddPrinterRequest struct {
	RestRequest `json:",inline"`
	Items       []*AddPrinterRequestItem `json:"items"`
}

//设置打印机语音类型
type SetVoiceTypeRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"`          //打印机编号
	VoiceType   int    `json:"voiceType"`   //声音类型：打印机固件版本为V10.xx的机器取值： 0真人语音（大） 1真人语音（中） 2真人语音（小） 3 嘀嘀声 4 静音;其它固件版本的机器取值：0真人语音 3 嘀嘀声 4 静音
	VolumeLevel int    `json:"volumeLevel"` //声音大小：0大 1中 2小 3关闭,说明：打印机固件版本为非V10.xx的机器支持此参数
}

//打印小票订单
type PrintRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"`      //打印机编号
	Content     string `json:"content"` //打印内容,不能超过12k字节
	//非必填
	Copies      int `json:"copies,omitempty"`      //打印份数,默认为1,取值[1-65535]
	Cutter      int `json:"cutter,omitempty"`      //是否支持切刀自定义控制  0采用默认切刀  1采用自定义控制切刀
	Voice       int `json:"voice,omitempty"`       //声音播放模式,0-取消订单模式,1-静音模式,2-来单播放模式(默认),3-播报退单语音，4-播报美团来单语音，5-播报饿了么来单语音
	Mode        int `json:"mode,omitempty"`        //打印模式，默认为0
	ExpiresIn   int `json:"expiresIn,omitempty"`   //订单有效期 单位：秒  取值范围为：0<订单失效时间<24*60*60,使用该参数时，需要将参数mode 设置为1
	BackurlFlag int `json:"backurlFlag,omitempty"` //回调地址对应标识，必须先在管理后台设置，否则无效
	//PayType     int     `json:"payType,omitempty"`     //41~55： 支付宝 41、微信 42、云支付 43、银联刷卡 44、银联支付 45、会员卡消费 46、会员卡充值 47、翼支付 48、成功收款 49、嘉联支付 50、壹钱包 51、京东支付 52、快钱支付 53、威支付 54、享钱支付 55
	//PayMode     int     `json:"payMode,omitempty"`     //59~61： 退款 59 到账 60 消费 61
	//Money       float64 `json:"money,omitempty"`       //支付金额 允许保留2位小数
}

//打印标签订单
type PrintLabelRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"`      //打印机编号
	Content     string `json:"content"` //打印内容,不能超过12k字节
	//非必填
	Copies      int     `json:"copies,omitempty"`      //打印份数,默认为1,取值[1-65535]
	Voice       int     `json:"voice,omitempty"`       //声音播放模式,0-取消订单模式,1-静音模式,2-来单播放模式(默认),3-播报退单语音，4-播报美团来单语音，5-播报饿了么来单语音
	Mode        int     `json:"mode,omitempty"`        //打印模式，默认为0
	ExpiresIn   int     `json:"expiresIn,omitempty"`   //订单有效期 单位：秒  取值范围为：0<订单失效时间<24*60*60,使用该参数时，需要将参数mode 设置为1
	BackurlFlag int     `json:"backurlFlag,omitempty"` //回调地址对应标识，必须先在管理后台设置，否则无效
	PayType     int     `json:"payType,omitempty"`     //41~55： 支付宝 41、微信 42、云支付 43、银联刷卡 44、银联支付 45、会员卡消费 46、会员卡充值 47、翼支付 48、成功收款 49、嘉联支付 50、壹钱包 51、京东支付 52、快钱支付 53、威支付 54、享钱支付 55
	PayMode     int     `json:"payMode,omitempty"`     //59~61： 退款 59 到账 60 消费 61
	Money       float64 `json:"money,omitempty"`       //支付金额 允许保留2位小数
}

//删除打印机
type DelPrinterRequest struct {
	RestRequest `json:",inline"`
	SnList      []string `json:"snlist"` //打印机编号集合
}

//修改打印机信息
type UpdPrinterRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"`             //打印机编号
	Name        string `json:"name,omitempty"` //打印机名称
	//非必填
	CardNo string `json:"cardno"` //打印机流量卡号码
}

//清空待打印队列
type EmpPrinterQueueRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"` //打印机编号
}

// 查询订单状态
type QueryOrderStateRequest struct {
	RestRequest `json:",inline"`
	OrderId     string `json:"orderId"` //订单编号,由“打印订单”接口返回
}

//查询指定打印机某天的订单统计数
type QueryOrderStatisRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"`   //打印机编号
	Date        string `json:"date"` //查询日期，格式YY-MM-DD，如：2016-09-20
}

//获取指定打印机状态
type QueryPrinterStatusRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"` //打印机编号
}

//批量查询打印机状态
type QueryPrintersStatusRequest struct {
	RestRequest `json:",inline"`
	SnList      []string `json:"snlist"` //打印机编号集合,一次最多20台
}

//金额播报 仅用于支持金额播报的芯烨云打印机
type PlayVoiceRequest struct {
	RestRequest `json:",inline"`
	Sn          string `json:"sn"` //打印机编号
	//非必填
	PayType int     `json:"payType"` //支付方式41~55
	PayMode int     `json:"payMode"` //支付与否59~61：退款 59 到账 60 消费 61
	Money   float64 `json:"money"`   //支付金额,允许保留2位小数
}
