using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace LifePayment.Domain.Shared
{
    public class WalletSingleTransactionInput
    {
        ///// <summary>
        ///// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列。要求6个月内唯一。
        ///// </summary>
        //[MaxLength(20)]
        //[Required]
        //public string ThirdVoucher { get; set; }


        /// <summary>
        /// 付款人账户 扣款账户
        /// </summary>
        [MaxLength(20)]
        [Required]
        public string OutAcctNo { get; set; }

        /// <summary>
        /// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号,若输入则长度必须在4 ~12位之间;
        /// </summary>
        [MaxLength(12)]
        public string InAcctBankNode { get; set; }

        /// <summary>
        /// 收款人账户
        /// </summary>
        [MaxLength(32)]
        [Required]
        public string InAcctNo { get; set; }

        /// <summary>
        /// 收款人账户户名
        /// </summary>
        [MaxLength(60)]
        [Required]
        public string InAcctName { get; set; }

        /// <summary>
        /// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
        /// </summary>

        [Required]
        public decimal TranAmount { get; set; }

        /// <summary>
        /// 资金用途 100个汉字,对方能否看到此用途视收款方银行的支持。
        /// </summary>
        [MaxLength(100)]

        public string UseEx { get; set; }

        /// <summary>
        /// 止付编号
        /// </summary>
        [MaxLength(30)]
        [Required]
        public string FreezeNo { get; set; }

        /// <summary>
        /// 委托单位协议号
        /// </summary>
        [MaxLength(32)]
        [Required]
        public string DfAgreementNo { get; set; }


        /// <summary>
        /// 费项编码
        /// </summary>
        [MaxLength(10)]
        [Required]
        public string AgreementCode { get; set; }
    }

    public class WalletSingleTransactionOutput
    {
        /// <summary>
        /// 转账凭证号
        /// </summary>
        public string ThirdVoucher { get; set; }

        /// <summary>
        /// 银行流水号 银行业务流水号;可以用于对账
        /// </summary>
        public string FrontLogNo { get; set; }

        /// <summary>
        /// 付款人账户
        /// </summary>
        public string OutAcctNo { get; set; }

        /// <summary>
        /// 收款人账户
        /// </summary>
        public string InAcctNo { get; set; }

        /// <summary>
        /// 收款人账户户名
        /// </summary>
        public string InAcctName { get; set; }

        /// <summary>
        /// 转出金额
        /// </summary>
        public string TranAmount { get; set; }

        /// <summary>
        /// 交易状态标志
        /// 20:交易成功
        /// 30:失败;
        /// 其他为银行受理成功处理中,请使用“交易进度查询JGF005”接口获取最终状态
        /// </summary>
        public string Stt { get; set; }
    }


    public class WalletSingleApplicationSuspensionPaymentInput
    {
        ///// <summary>
        ///// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列。要求6个月内唯一。
        ///// </summary>
        //[MaxLength(20)]
        //[Required]
        //public string ThirdVoucher { get; set; }

        public Guid? WalletMainId { get; set; }

        /// <summary>
        /// 请求方系统流水号
        /// 唯一标识一笔交易 备注:(如果某种交易要有多次请求的才能完成的,多个交易请求包流水号要保持一致)
        /// </summary>
        [MaxLength(20)]
        [Required]
        public string CnsmrSeqNo { get; set; }

        /// <summary>
        /// 付款人账户 扣款账户 支付宝传 记账本id的值
        /// </summary>
        [MaxLength(20)]
        [Required]
        public string OutAcctNo { get; set; }

        /// <summary>
        /// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号,若输入则长度必须在4 ~12位之间;
        /// </summary>
        [MaxLength(12)]
        public string InAcctBankNode { get; set; }

        /// <summary>
        /// 收款人账户 或者是支付宝登录号
        /// </summary>
        [MaxLength(32)]
        [Required]
        public string InAcctNo { get; set; }

        /// <summary>
        /// 收款人账户户名
        /// </summary>
        [MaxLength(60)]
        [Required]
        public string InAcctName { get; set; }

        /// <summary>
        /// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
        /// </summary>

        [Required]
        public decimal TranAmount { get; set; }

        /// <summary>
        /// 资金用途 100个汉字,对方能否看到此用途视收款方银行的支持。
        /// </summary>
        [MaxLength(100)]

        public string UseEx { get; set; }


        /// <summary>
        /// 行内跨行标志 1:行内转账,0:跨行转账
        /// </summary>
        [MaxLength(1)]
        [Required]
        public string UnionFlag { get; set; }

        [Required]
        [MaxLength(60)]
        public string InAcctBankName { get; set; }

        /// <summary>
        /// 付款人名称 付款账户户名 支付宝传 agreement_no
        /// </summary>
        [MaxLength(60)]
        [Required]
        public string OutAcctName { get; set; }



        ///// <summary>
        ///// 止付编号
        ///// </summary>
        //[MaxLength(30)]
        //[Required]
        //public string FreezeNo { get; set; }

        ///// <summary>
        ///// 委托单位协议号
        ///// </summary>
        //[MaxLength(32)]
        //[Required]
        //public string DfAgreementNo { get; set; }


        ///// <summary>
        ///// 费项编码
        ///// </summary>
        //[MaxLength(10)]
        //[Required]
        //public string AgreementCode { get; set; }
    }
    public class WalletSingleApplicationSuspensionPaymentOutput
    {
        /// <summary>
        /// 转账凭证号
        /// </summary>
        public string ThirdVoucher { get; set; }

        /// <summary>
        /// 银行流水号 银行业务流水号;可以用于对账 
        /// 支付宝为 支付宝转账订单号 order_id
        /// </summary>
        public string FrontLogNo { get; set; }

        /// <summary>
        /// 客户自定义凭证号 用于客户转账登记和内部识别,通过转账结果查询可以返回。银行不检查唯一性 
        /// 支付宝为 商户订单号 out_biz_no
        /// </summary>
        public string CstInnerFlowNo { get; set; }

        /// <summary>
        /// 货币类型
        /// </summary>
        public string CcyCode { get; set; }

        /// <summary>
        /// 付款人账户名称
        /// 支付宝为 agreement_no
        /// </summary>
        public string OutAcctName { get; set; }

        /// <summary>
        /// 付款人账户 记账本id的值
        /// </summary>
        public string OutAcctNo { get; set; }

        /// <summary>
        /// 收款人开户行名称
        /// </summary>
        public string InAcctBankName { get; set; }

        /// <summary>
        /// 收款人账户
        /// </summary>
        public string InAcctNo { get; set; }

        /// <summary>
        /// 收款人账户户名
        /// </summary>
        public string InAcctName { get; set; }

        /// <summary>
        /// 交易金额
        /// </summary>
        public string TranAmount { get; set; }

        /// <summary>
        /// 行内跨行标志 1:行内转账,0:跨行转账
        /// </summary>
        public string UnionFlag { get; set; }

        /// <summary>
        /// 手续费 转账手续费预算,实际手续费用以实际扣取的为准。
        /// </summary>
        public string Fee1 { get; set; }

        /// <summary>
        /// 邮电费
        /// </summary>
        public string Fee2 { get; set; }

        /// <summary>
        /// 银行返回流水号 银行记账流水号;转账成功后,银行返回的流水号。
        /// 支付宝为 支付宝支付资金流水号 pay_fund_order_id
        /// </summary>
        public string HostFlowNo { get; set; }

        /// <summary>
        /// 记账日期 银行交易成功后的记账日期,仅对行内实时转账交易有效。
        /// </summary>
        public string HostTxDate { get; set; }

        /// <summary>
        /// 交易状态标志 20:交易成功 30:失败;其他为银行受理成功处理中,请使用“交易进度查询4005”接口获取最终状态
        /// </summary>
        public string Stt { get; set; }

        /// <summary>
        /// 转账单据状态。
        /// SUCCESS:成功(对转账到银行卡的单据, 该状态可能变为退票[REFUND] 状态);
        /// FAIL:失败;
        /// DEALING:处理中;
        /// REFUND:退票;
        /// </summary>
        public string AlipayStatus { get; set; }

        /// <summary>
        /// 止付编号 有效状态的平安易止付编号,从JGF001止付后返回的
        /// </summary>
        public string FreezeNo { get; set; }
    }

    /// <summary>
    /// 企业账户余额查询_银企直联输出参数
    /// </summary>
    public class GetCorAcctBalanceQueryOutput
    {
        /// <summary>
        /// 账号
        /// 数据长度:20,是否必输:Y
        /// </summary>
        public string Account { get; set; }


        /// <summary>
        /// 账户户名
        /// 数据长度:60,是否必输:Y
        /// </summary>
        public string AccountName { get; set; }

        /// <summary>
        /// 可用余额 不含集团现金管理合约余额
        /// 数据长度:16,2,是否必输:Y
        /// </summary>
        public decimal? Balance { get; set; }

        /// <summary>
        /// 账面余额 不含集团现金管理合约余额
        /// 数据长度:13,是否必输:Y
        /// </summary>
        public decimal? TotalAmount { get; set; }

        /// <summary>
        /// 账户状态 账户层状态,A正常、D不动户、I 久悬户,若有多个状态,“|”分割,如:A| DGZH02。DGZH02: 账户止付
        /// 数据长度:10,是否必输:N
        /// </summary>
        public string AccountStatus { get; set; }

        /// <summary>
        /// 冻结金额
        /// 数据长度:16,2,是否必输:N
        /// </summary>
        public decimal? HoldBalance { get; set; }

        /// <summary>
        /// 止付金额
        /// 数据长度:16,2,是否必输:N
        /// </summary>
        public decimal? StopBalance { get; set; }

        /// <summary>
        /// 昨日余额
        /// 数据长度:16,2,是否必输:N
        /// </summary>
        public decimal? LastBalance { get; set; }



        /// <summary>
        /// 账户余额
        /// 数据长度:16,2,是否必输:N
        /// </summary>
        public decimal? AcctBalance { get; set; }



        /// <summary>
        /// 账户状态字 
        /// 若有多个状态字,“|”分割,如:DGZH02-账户止付|DGZH06-只收不付状态字值如下,可能会新增:
        /// DGZH02-账户止付,
        /// DGZH03-印鉴挂失,
        /// DGZHE6-预开户,
        /// DGZHG9-开户三天管控,
        /// DGZH06-只收不付,
        /// DGZH07-不付不收,
        /// DGZH08-只付不收,
        /// DGBZ02-账户止付,
        /// DGBZ07-不付不收,
        /// DGBZG9-开户三天管控,
        /// ZH9999-其他异常
        /// 数据长度:500,是否必输:N
        /// </summary>
        public string AccountStatusDesc { get; set; }
    }
}