using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace XYY.Service.Standard.ChannelApi.HuoYing
{
    public class OrdersmatlistItem
    {
        /// <summary>
        /// 箱唛号：与上面的 jobno 一致
        /// </summary>
        public string jobid { get; set; }
        /// <summary>
        /// 单箱产品数量：本箱所装此产品的数量 必填
        /// </summary>
        public int qty { get; set; }
        /// <summary>
        /// 单个产品清关申报单价
        /// 必填
        /// </summary>
        public decimal value { get; set; }
        /// <summary>
        /// 中文品名    必填
        /// </summary>
        public string productch { get; set; }
        /// <summary>
        /// 英文品名    必填
        /// </summary>
        public string producten { get; set; }
        /// <summary>
        /// 品牌  必填
        /// </summary>
        public string pinpai { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string pptype { get; set; }
        /// <summary>
        /// 国内海关编码  必填
        /// </summary>
        public string hscode { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string xinghao { get; set; }
        /// <summary>
        /// 英文产品材质  
        /// </summary>
        public string caizhi { get; set; } = "";
        /// <summary>
        /// 英文产品用途  
        /// </summary>
        public string yongtu { get; set; } = "";
        /// <summary>
        /// 无
        /// </summary>
        public string baozhuang { get; set; }
        /// <summary>
        /// 单个产品净重  小数点后保留两位    必填
        /// </summary>
        public decimal jingweit { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string daino { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string skuno { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string caigouprice { get; set; }
        /// <summary>
        /// 国外海关编码：可以为空或者与国内海关编码一样
        /// </summary>
        public string forcustno { get; set; }
        /// <summary>
        /// 报关申报币种：RMB,USD,GBP 等，如果为空则系统自动默认为清
        ///关申报币种
        ///选填
        /// </summary>
        public string bgbibie { get; set; }
        /// <summary>
        /// 清关申报币种：RMB,USD,GBP 等    必填
        /// </summary>
        public string qgbibie { get; set; }
        /// <summary>
        /// 单个产品报关申报单价  选填
        /// </summary>
        public string bgvalue { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string salesvalue { get; set; }
        /// <summary>
        /// 中文产品材质：可以为空，
        /// </summary>
        public string zwmat { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string zwuse { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string zwarticno { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string salesurl { get; set; }
        /// <summary>
        /// 无
        /// </summary>
        public string saveurl { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string picbase64 { get; set; }
        /// <summary>
        /// 单个产品性质：如普货，带电，带磁，纺织品等
        ///调用基础参数接口中的 SMATNO 产品大类获取代号和名称，此处
        ///传入代号[valuecode]的值即可，如果是多个产品大类,如带磁,带电，则代号之间用英文逗号隔开
        ///可以填空
        /// </summary>
        public string smatnos { get; set; }
    }

    public class OrderDetailListItem
    {
        public OrderDetailListItem() { ordersmatlist = new List<OrdersmatlistItem>(); }
        /// <summary>
        /// 状态：固定为 OT
        /// </summary>
        public string zhuangtai { get; set; } = "OT";
        /// <summary>
        /// 长
        /// </summary>
        public decimal mlength { get; set; }
        /// <summary>
        /// 宽
        /// </summary>
        public decimal mwidth { get; set; }
        /// <summary>
        /// 高
        /// </summary>
        public decimal mheight { get; set; }
        /// <summary>
        /// 单件实重
        /// </summary>
        public decimal mweit { get; set; }
        /// <summary>
        /// 件数：默认为 1
        /// </summary>
        public int jcnt { get; set; } = 1;
        /// <summary>
        /// 箱唛号：可以为单箱上面 FBA 字号，如果不是 FBA 货物，有没
        ///箱唯一的客户自己的箱唛号，也可以填写，如果实在没有，则
        ///填写 1，2，3 代表第一箱，第二箱，第三箱
        /// </summary>
        public string jobno { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string refno { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<OrdersmatlistItem> ordersmatlist { get; set; }
    }

    public class RequestData
    {
        public RequestData() { orderDetailList = new List<OrderDetailListItem>(); }
        /// <summary>
        /// 企业 ID：003   必填
        /// </summary>
        public string Factno { get; set; } = "003";
        /// <summary>
        /// 客户登录账号  必填
        /// </summary>
        public string supno { get; set; }
        /// <summary>
        /// 客户登陆密码  必填
        /// </summary>
        public string suppass { get; set; }
        /// <summary>
        /// 客户 API 授权码  必填
        /// </summary>
        public string appkey { get; set; }
        /// <summary>
        /// 收货仓库代码:调用基础参数接口中的STOCK仓库类型获取仓库
        ///代号和名称，此处传入仓库代号即可
        ///必填
        /// </summary>
        public string organo { get; set; }
        /// <summary>
        /// 运单号：客户的运单号 必填
        /// </summary>
        public string packno { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string supcode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string typeno { get; set; }
        /// <summary>
        /// 渠道类型:可以由企业提供，也可以调用基础参数接口中的
        /// QUDAO 渠道类型获取代号和名称，此处传入代号[valuecode]的值即可
        ///德国dpd派送-NPE  "valuecode": "0030003",
        ///必填
        /// </summary>
        public string channeltype { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string channelprice { get; set; }
        /// <summary>
        /// 地址类型：包含亚马逊地址，海外仓地址，商业地址，私人地
        ///址等，调用基础参数接口中的 WORGNO 国外派送地址类型获取代
        ///号和名称，此处传入代号[valuecode] 的值即可
        ///必填      先只做商业地址
        /// </summary>
        public string worgno { get; set; } = "03";
        /// <summary>
        /// 国外地址名称：如果是亚马逊仓库，则直接输入亚马逊仓库代码，其他地址可以为空
        /// </summary>
        public string addnm { get; set; }
        /// <summary>
        /// 目的地：调用基础参数接口中的 DEST 目的地获取代号和名称，
        ///此处传入代号[valuecode] 的值即可
        ///必填
        ///先默认写东欧
        ///传错会造成返回结果异常，但是订单会进入对方系统，再次下单会提示订单号重复
        /// </summary>
        public string dest { get; set; } 
        /// <summary>
        /// 
        /// </summary>
        public string expresstype { get; set; }
        /// <summary>
        /// 收件人公司名称 必填
        /// </summary>
        public string delcompanynm { get; set; }
        /// <summary>
        /// 收件联系人姓名 必填
        /// </summary>
        public string contactsby { get; set; }
        /// <summary>
        /// 收件人地址 1：由于 UPS,FEDEX,DPD 等派件公司对应收件人地址
        ///有长度限制，所以收件人地址不要一次性放到地址 1,可以分开
        ///放地址 1，地址 2，地址 3
        ///35个字符  需要切换，至多切换两次
        /// </summary>
        public string address1 { get; set; }
        /// <summary>
        /// 收件人电话   必填
        /// </summary>
        public string phone { get; set; }
        /// <summary>
        /// 收件人邮编   必填
        /// </summary>
        public string postno { get; set; }
        /// <summary>
        ///收件人所在州或者省份：州必须对应快递公司提供的二字码，比如美国 NY ，可以为空,系统自动识别
        /// </summary>
        public string state { get; set; }
        /// <summary>
        /// 收件人城市：可以为空
        /// </summary>
        public string city { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string address2 { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string address3 { get; set; }
        /// <summary>
        /// 收件人邮箱：可以为空
        /// </summary>
        public string mailNo { get; set; }
        /// <summary>
        /// 品名：如果多个品名，则用英文逗号隔开，可以为空
        /// </summary>
        public string productname { get; set; }
        /// <summary>
        /// 产品大类：如普货，带电，带磁，纺织品等
        ///调用基础参数接口中的 SMATNO 产品大类获取代号和名称，此处
        ///传入代号[valuecode]的值即可，如果是多个产品大类,如带磁, 带电，则代号之间用英文逗号隔开
        ///可以填空
        /// </summary>
        public string smatno { get; set; }
        /// <summary>
        /// 是否购买保险：需要购买填写 Y，不需要填写 N  必填
        /// 会群答复：不买
        /// </summary>
        public string bxflg { get; set; } = "N";
        /// <summary>
        /// 保险金额:无需购买保险则填写 0.00
        /// </summary>
        public string indamt { get; set; } = "0.00";
        /// <summary>
        /// 报关方式：调用基础参数接口中的 BAOGUAN 报关方式获取代号
        ///和名称，此处传入代号[valuecode] 的值即可
        ///必填
        /// </summary>
        public string declaration { get; set; }
        /// <summary>
        /// 清关方式：调用基础参数接口中的 QINGGUAN 清关方式获取代号
        ///和名称，此处传入代号[valuecode] 的值即可
        ///必填
        ///使用不包税
        /// </summary>
        public string clearance { get; set; } = "01";
        /// <summary>
        /// 预付到付：PP 代表预付，CC 代表到付，可以为空
        /// </summary>
        public string yfdfmk { get; set; }
        /// <summary>
        /// 到付或代收款币种:请填写币种三字码：USD,RMB 等，可以为空
        /// </summary>
        public string dfdw { get; set; }
        /// <summary>
        /// 到付或代收款金额，可以为空
        /// </summary>
        public int dfcash { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string remark { get; set; }
        /// <summary>
        /// 快递公司接口类型：如果需要通过 api 接口直接打 UPS 或者
        ///FEDEX 面单则此处必填，否则可以为空，或者默认 PACKAGE，但
        ///是要素必须存在，不允许删除,否则会报要素不存在错误
        ///Ups：如需调用 UPS 接口则此处必填:GFP 填写 FREIGHT
        ///其他填写 PACKAGE
        ///FEDEX:如需调用 FEDEX 接口则此处必填:GROUND 或者 SMARTPOST
        /// </summary>
        public string upsmk { get; set; }
        /// <summary>
        /// 发货人公司：可以为空，
        /// </summary>
        public string sdcompanynm { get; set; }
        /// <summary>
        /// 发货人姓名：可以为空，
        /// </summary>
        public string sendby { get; set; }
        /// <summary>
        /// 发货人电话：可以为空，
        /// </summary>
        public string sendmobi { get; set; }
        /// <summary>
        /// 发货人地址：可以为空
        /// </summary>
        public string sendbyaddress { get; set; }
        /// <summary>
        /// VAt 税号:可以为空
        /// </summary>
        public string vatno { get; set; }
        /// <summary>
        /// 欧洲 Eori 号：可以为空
        /// </summary>
        public string eorino { get; set; }
        /// <summary>
        /// Vat 公司名：可以为空
        /// </summary>
        public string vatfact { get; set; }
        /// <summary>
        /// Vat 地址：可以为空，
        /// </summary>
        public string vatadd { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string vatphone { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string kacheNo { get; set; }
        /// <summary>
        /// FBA 主单号：可以为空
        /// </summary>
        public string fbano { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string shipmentID { get; set; }
        /// <summary>
        /// 提货方式：调用基础参数接口中的 DELIVERYMODE 提货方式获取
        ///代号和名称，此处传入代号即可，可以为空，但是要素必须存
        ///在，不允许删除,否则会报要素不存在错误
        /// </summary>
        public string deliverymode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string zycode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string fileurl1 { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string fileurl2 { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string fileurl3 { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<OrderDetailListItem> orderDetailList { get; set; }
    }

    public class DataUploadRequest
    {
        /// <summary>
        /// 
        /// </summary>
        public RequestData data { get; set; }
    }
}
