package model

import (
	"errors"
	"github.com/astaxie/beego/validation"
	"reflect"
)

type PlaceAnOrderParamInput struct {
	PlatformType   uint8   `json:"platform_type" description:"平台类型 1: saas  2: shop 3: shop mobile 4: 收银台"`
	PlatformInfo   string  `json:"platform_info" description:"平台信息"`
	GoodsDes       string  `json:"goods_des" description:"商品描述"`
	GoodsDetail    string  `json:"goods_detail" description:"商品详情"`
	AttachInfo     string  `json:"attach_info" description:"附加信息"`
	GoodsPrice     float64 `json:"goods_price" description:"商品金额,个位为分"`
	NoticeURL      string  `json:"notice_url" description:"客户端回调的url"`
	PayType        int     `json:"pay_type" description:"1: 微信,2: 支付宝, 3: 拉卡拉 4: 收钱吧"`
	SourceCode     uint8   `json:"source_code" description:"1: 微信 Native  2:微信小程序  3:微信内支付 4:h5 跳微信 5:支付宝(web)-扫码或登录支付宝账户  6:alipay(mobile) 7:alipay(app) 9: B2C 10:bk支付宝web 11:bk 支付宝手机"`
	OpenID         string  `json:"open_id" description:"此参数 支付类型是 JS API 的时候 必传"`
	WapURL         string  `json:"wap_url" description:"WAP网站URL地址, 支付方式为微信MWEB时 必传"`
	WapName        string  `json:"wap_name" description:"WAP网站名称, 支付方式为微信MWEB时 必传"`
	QuitURL        string  `json:"quit_url" description:"返回按钮 可用于用户付款中途退出并返回到该参数指定的商户网站地址, 支付方式为 支付宝手机网站时 必传(尽量传)"`
	ReturnURL      string  `json:"return_url" description:"用户在完成支付后,会根据商户在请求支付API中传入的前台回跳地址return_url自动跳转return_url地址页面(必传)"`
	AppID          string  `json:"app_id,omitempty" description:"wxAppId source code 2 小程序支付时必传、同时小程序支付必须关联了商户号支付"`
	Operator       string  `json:"operator" description:"操作员"`
	Customer       string  `json:"customer" description:"顾客信息"`
	DynamicID      string  `json:"dynamic_id" description:"顾客手机条码的内容"`
	StoreSn        string  `json:"store_sn" description:"商户门店编号"`
	IsServe        uint    `json:"is_serve" description:"0直连模式  1服务商模式"`
	OrderId        string  `json:"-" description:"订单号"`
	SubMchid       string  `json:"sub_mchid" description:"通过进件接口申请的支付商户号、这是由微信生成并下发的"`
	Nonce          string  `json:"-"`
	ServeNoticeUrl string  `json:"-" description:"传递给支付渠道的、而不是业务方的"`
}

func (this *PlaceAnOrderParamInput) ValidPlaceAnOrderParamInput() (err error) {
	valid := validation.Validation{}

	if b, _ := valid.Valid(this); !b {
		//表示获取验证的结构体
		st := reflect.TypeOf(PlaceAnOrderParamInput{})
		for _, err := range valid.Errors {
			//获取验证的字段名和提示信息的别名
			filed, _ := st.FieldByName(err.Field)
			var alias= filed.Tag.Get("alias")
			//返回验证的错误信息
			return errors.New(alias + err.Message)
		}
	}

	return nil
}

type LakalaParamInput struct {
	Version string `json:"version" description:"版本"`
	ReqTime string `json:"req_time" description:"请求时间"`
	ReqData LakalaParamData `json:"req_data"`
}

type LakalaParamData struct {
	OutOrderNo   string  `json:"out_order_no" description:"商户订单号"`
	MerchantNo   string  `json:"merchant_no" description:"银联商户号"`

	TotalAmount     float64 `json:"total_amount" description:"订单金额,单位:分"`
	OrderEfficientTime   string  `json:"order_efficient_time" description:"订单有效期 格式yyyyMMddHHmmss,最大支持下单时间+2天"`
	NotifyUrl   string  `json:"notify_url" description:"订单支付成功后商户接收订单通知的地址 http://xxx.xxx.com"`


	CallbackUrl   string  `json:"callback_url" description:"客户端下单完成支付后返回的商户网页跳转地址"`
	OrderInfo   string  `json:"order_info" description:"订单标题,在使用收银台扫码支付时必输入,交易时送往账户端"`
	GoodsMark   string  `json:"goods_mark" description:"商品信息标识 (1:含商品信息,不填默认不含商品信息)"`
}