import { IMessageHead } from '@/services/socket/trade/protobuf/proto'
import Long from 'long'

declare global {
    namespace Proto {
        /** 铁合金现货预售摘牌接口请求 */
        interface SpotPresaleDestingOrderReq {
            Header?: IMessageHead;
            UserID: number; // 用户ID，必填
            AccountID: number; // 资金账号，必填
            PresaleApplyID: Long; // 预售申请ID，必填
            Qty: number; // 预售数量，必填
            DepositID: number; // 定金方式，THJ_PresaleApplyDeposit表ID,必填
            THJDeliveryMode: number; // 交割方式，必填1：平台仓储2：自提
            ContactName: string; // 联系人姓名,THJDeliveryMode=2，3时必填
            ContactInfo: string; // 联系方式,THJDeliveryMode=2，3时必填
            DesAddress: string; // 目的地地址,THJDeliveryMode=3时必填
            ReceiptInfo: string; // 发票信息,THJDeliveryMode=2，3时必填
            ClientType: number; // 终端类型
            ClientSerialNo: string; // 客户端流水号
        }

        /** 铁合金现货预售摘牌接口应答 */
        interface SpotPresaleDestingOrderRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            PresaleApplyID: number; // 预售申请ID
            WRTradeDetailID: number; // 成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        /** 铁合金现货预售交收确认接口请求 */
        interface SpotPresaleDeliveryConfirmReq {
            Header?: IMessageHead;
            UserID?: number; // 用户ID，必填
            WRTradeDetailID?: Long; // 采购成交单ID，必填
            Remark?: string; // 备注
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
        }

        /** 铁合金现货预售交收确认接口应答 */
        interface SpotPresaleDeliveryConfirmRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID，必填
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        /** 铁合金现货预售违约确认接口请求 */
        interface SpotPresaleBreachOfContractConfirmReq {
            Header?: IMessageHead;
            WRTradeDetailID: number; // 采购成交单ID，必填
            BuyAmount: number; // 买方应退费用，必填
            ExchangeAmount: number; // 平台应收，必填
            HandleRemark: string; // 处理备注
            ClientType: number; // 终端类型
            ClientSerialNo: string; // 客户端流水号
        }

        /** 铁合金现货预售违约确认接口应答 */
        interface SpotPresaleBreachOfContractConfirmRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID，必填
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        // 铁合金现货预售违约申请接口请求
        interface SpotPresaleBreachOfContractApplyReq {
            Header?: IMessageHead;
            UserID?: number; // 用户ID，必填
            WRTradeDetailID?: Long; // 采购成交单ID，必填
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
        }

        // 铁合金现货预售违约申请接口应答
        interface SpotPresaleBreachOfContractApplyRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID，必填
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        // 铁合金现货预售付款处理接口请求
        interface SpotPresalePlaymentReq {
            Header?: IMessageHead;
            UserID?: number; // 用户ID，必填
            WRTradeDetailID?: Long; // 采购成交单ID，必填
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
}
        // 铁合金现货预售付款处理接口应答
        interface SpotPresalePlaymentRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID，必填
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        // 挂牌撤单请求
        interface WRListingCancelOrderReq {
            Header?: IMessageHead;
            UserID?: number // 用户ID
            AccountID?: number // 资金账号
            OldWRTradeOrderID?: Long // 目标仓单贸易委托单ID
            OrderSrc?: number // 委托来源
            ClientSerialNo?: string // 客户端流水号
            ClientOrderTime?: string // 客户端委托时间
            ClientType?: number // 终端类型
            OperatorID?: number  // 操作员账号ID
            BuyOrSell?: number  // 买卖方向
            WRID?: number // 仓单ID,卖的时候填写
}
        // 挂牌撤单应答
        interface WRListingCancelOrderRsp {
            Header?: IMessageHead;
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            WRTradeCancelID ?: number // 仓单贸易撤单号
            OldWRTradeOrderID?: number // 目标仓单贸易委托单ID
            UserID?: number // 用户ID
            AccountID?: number // 资金账号
            CancelQty?: number // 撤单数量
            OrderTime?: string // 接受撤单的时间
            ClientSerialNo?: string // 客户端流水号
        }

        // 仓单出库提单明细数据
        interface WROutInDetail {
            LadingBillID: string; // 提单ID
            SubNum: number; // 提单子单号
            Qty: number; // 子提单总数量
            OutQty: number; // 预约数量
        }

        // 仓单出库申请
        interface WROutApplyReq {
            Header?: IMessageHead;
            ClientSerialID: number; // 客户端唯一ID
            WRStandardID: number; // 仓单标准ID
            WarehouseID: number; // 仓库ID
            UserID: number; // 申请人ID
            AccountID: number; // 申请人账户ID
            Mobile: string; // 申请人手机号
            AppointmentDate: string; // 预约出库时间（格式：20200101）
            AppointmentModel: number; // 预约方式:1-物流,2-自送，3-自提
            CountryID: number; // 国家
            ProvinceID: number; // 省
            DistrictID: number; // 区
            CityID: number; // 市
            Address: string; // 详细地址
            ContactName: string; // 收货人提货人
            ContactNum: string; // 收货人提货人手机
            AppointmentRemark: string; // 预约备注
            CreatorID: number; // 创建人ID
            WROutInDetails: WROutInDetail; // 仓单出库提单明细数据
        }

        // 仓单出库申请响应
        interface WROutApplyRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            ClientSerialID: number; // 客户端唯一ID
        }

        // 要素类型明细
        interface DGFactoryItems {
            DGFactoryItemTypeID: number = 1; // 要素项类型ID
            DGFactoryItemID: number; // 预约要素项类型值
            ItemTypeMode: number; // 要素项类型模式
        }

        // 仓单贸易浮动价商品配置信息
        interface WRGoodsInfo {
            GoodsID: number = 1; // 配置商品ID
            GoodsCode: string; // 配置商品代码
            PriceFactor: number; // 商品价格系数
            PriceMove: number; // 商品升贴水值
            WeightRatio: number; // 商品重量系数
        }

        // 持仓单挂牌请求
        interface HdWROrderReq {
            Header?: IMessageHead;
            LadingBillId: number; // 提单id(wrholdlb的LadingBillId字段),卖的时候填写
            TradeDate: string; // 交易日
            SubNum: number; // 提单子单号(wrholdlb的SubNum字段),卖的时候填写
            WRFactorTypeId: number; // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写
            UserID: number; // 用户ID
            AccountID: number; // 资金账号
            IsSpecified: number; // 是否指定对手
            MatchAccIDs: number; // 仓单贸易对手用户ID集合(指定对手时填写)
            OrderQty: number; // 委托数量(可挂部分数据量)
            DeliveryGoodsID: number; // 交割商品商品ID
            WRPriceType: number; // 价格方式
            FixedPrice: number; // 固定价格
            WRTradeGoods: WRGoodsInfo; // 仓单贸易商品配置集合(浮动价时填写)
            PriceFactor: number; // 价格系数(浮动价时填写)-[挂牌]
            PriceMove: number; // 升贴水(浮动价时填写)
            TimevalidType: number; // 时间有效类型
            ValidTime: string; // 有效期限
            FirstRatio: number; // 首付比例
            PerformanceTemplateID: number; // 履约计划模板ID
            OrderSrc: number; // 委托来源
            ClientSerialNo: string; // 客户端流水号
            ClientOrderTime: string; // 客户端委托时间
            ClientType: number; // 终端类型
            OperatorID: number; // 操作员账号ID
            BuyOrSell: number; // 买卖方向
            PriceDisplayMode: number; // 浮动价显示方式
            CanBargain: number; // 挂牌是否可议价0:不可1:可-摘牌是否议价
            Attachment1: string; // 附件1
            Attachment2: string; // 附件2
            Remark: string; // 备注
            ApplyID: number; // 申请ID
            CanPart: number; // 是否允许部份摘牌0:不允许;1:允许
            MatchAccIDsString: string; // 仓单贸易对手用户ID集合(指定对手时填写)
            DeliveryMonth: string; // 交收月
            HasWr: number; // 是否有仓单-0:没有仓单1:有仓单
            WRStandardID: number; // 现货品种ID
            FactoryItems: DGFactoryItems; // 要素类型明细集合(没有仓单要素ID填写)
            DelistMinQty: number; // 起摘数量
            MarginFlag: number; // 挂牌是否指定保证金0:否1:是
            MarginAlgorithm: number; // 指定保证金方式1:比率2:固定
            MarginValue: number; // 指定保证金设置值
            AllFriendsFlag: number; // 是否全好友可见0：否1:是
        }

        // 持仓单挂牌应答
        interface HdWROrderRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID
            AccountID: number; // 资金账号
            WRTradeOrderID: number; // 仓单贸易委托单ID
            FreezeQty: number = 7; // 冻结数量
            OrderTime: string; // 接收委托交易的时间
            ClientSerialNo: string; // 客户端流水号
        }

        // 持仓单摘牌请求
        interface HdWRDealOrderReq {
            Header?: IMessageHead;
            UserID: number; // 用户ID
            AccountID: number; // 资金账号
            RelatedWRTradeOrderI: numberD; // 关联委托单号(摘牌委托关联挂牌委托单ID)
            WRTransferUserID: number; // 仓单受让用户
            OrderQty: number; // 委托数量
            OrderSrc: number; // 委托来源
            ClientSerialNo: string; // 客户端流水号
            ClientOrderTime: string; // 客户端委托时间
            ClientType: number; // 终端类型
            OperatorID: number; // 操作员账号ID
            BuyOrSell: number; // 买卖方向
            ApplyID: number; // 申请ID
            LadingBillId: number; // 提单id(wrholdlb的LadingBillId字段),卖的时候填写
            SubNum: number; // 提单子单号(wrholdlb的SubNum字段),卖的时候填写
            WRFactorTypeId: number; // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写
            TradeDate: string; // 交易日
            DeliveryMonth: string; // 交收月
            HasWr: number; // 是否有仓单-0:没有仓单1:有仓单
            IsFinancing: number; // 是否融资购买(买摘牌时有效)-0:否1:是
            ProductDetailID: number; // 金融机构产品组合ID(融资购买时有效)
        }

        // 持仓单摘牌应答
        interface HdWRDealOrderRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID
            AccountID: number; // 资金账号
            WRTradeOrderID: number; // 仓单贸易委托单ID
            RelatedWRTradeOrderID: number; // 关联委托单号(摘牌委托关联挂牌委托单ID)
            FreezeAmount: number; // 冻结货款
            OrderTime: string; // 接收委托交易的时间
            ClientSerialNo: string; // 客户端流水号
        }

        // 铁合金现货预售转让挂牌接口请求
        interface SpotPresaleTransferListingReq {
            Header?: IMessageHead; // 消息头
            UserID?: number; // 用户ID，必填
            WRTradeDetailID?: Long; // 采购成交单ID，必填
            TransferPrice?: number; // 转让价格，必填
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
        }

        // 铁合金现货预售转让挂牌接口响应
        interface SpotPresaleTransferListingRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID，必填
            TransferID: number; // 协议转让ID
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        // 铁合金现货预售转让撤销接口请求
        interface SpotPresaleTransferCancelReq {
            Header?: IMessageHead; // 消息头
            UserID?: number; // 用户ID，必填
            WRTradeDetailID?: Long; // 采购成交单ID，必填
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
        }

        // 铁合金现货预售转让撤销接口响应
        interface SpotPresaleTransferCancelRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            TransferID: number; // 协议转让ID
            WRTradeDetailID: number; // 采购成交单ID
            ClientSerialNo: string; // 客户端流水号
        }

        // 铁合金现货预售转让摘牌接口请求
        interface SpotPresaleTransferDestingReq {
            Header?: IMessageHead; // 消息头
            UserID?: number; // 用户ID，必填
            AccountID?: number; // 摘牌资金账户ID，必填
            TransferID?: Long; // 协议转让ID
            ClientType?: number; // 终端类型
            ClientSerialNo?: string; // 客户端流水号
        }

        // 铁合金现货预售转让摘牌接口响应
        interface SpotPresaleTransferDestingRsp {
            Header?: IMessageHead; // 消息头
            RetCode: number; // 返回码
            RetDesc: string; // 描述信息
            UserID: number; // 用户ID
            TransferID: number; // 协议转让ID
            ClientSerialNo: string; // 客户端流水号
        }
    }
}