using LifePayment.Domain.Shared;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LifePayment.Domain.Shared;

public class QueryUserWalletAccountOpenInput
{
    public WalletAccountTypeEnum? WalletAccountType { get; set; }

    public Guid? UserId { get; set; }

    public List<Guid> UserIds { get; set; }
}

public class AddSingleTransferWalletTransactionDetailInput
{
    public Guid? WalletMainId { get; set; }

    /// <summary>
    /// 账号
    /// </summary>
    public string AcctNo { get; set; }

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

    /// <summary>
    /// 主机记账日期
    /// </summary>
    public string AcctDate { get; set; }

    /// <summary>
    /// 交易时间
    /// </summary>
    public string TxTime { get; set; }

    public DateTime AccDateTime { get; set; }

    /// <summary>
    /// 主机流水号
    /// </summary>
    public string HostTrace { get; set; }

    /// <summary>
    /// 业务流水号
    /// </summary>
    public string BussSeqNo { get; set; }

    /// <summary>
    /// 明细序号
    /// </summary>
    public string DetailSerialNo { get; set; }

    /// <summary>
    /// 付款方网点号
    /// </summary>
    public string OutNode { get; set; }

    /// <summary>
    /// 付款方联行号
    /// </summary>
    public string OutBankNo { get; set; }

    /// <summary>
    /// 付款行名称
    /// </summary>
    public string OutBankName { get; set; }

    /// <summary>
    /// 付款方账号
    /// </summary>
    public string OutAcctNo { get; set; }

    /// <summary>
    /// 付款方户名
    /// </summary>
    public string OutAcctName { get; set; }

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

    /// <summary>
    /// 收款方网点号
    /// </summary>
    public string InNode { get; set; }

    /// <summary>
    /// 收款方联行号
    /// </summary>
    public string InBankNo { get; set; }

    /// <summary>
    /// 收款方行名
    /// </summary>
    public string InBankName { get; set; }

    /// <summary>
    /// 收款方账号
    /// </summary>
    public string InAcctNo { get; set; }

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

    /// <summary>
    /// 借贷标志
    /// </summary>
    public string DcFlag { get; set; }

    /// <summary>
    /// 凭证号
    /// </summary>
    public string VoucherNo { get; set; }

    /// <summary>
    /// 手续费
    /// </summary>
    public decimal? TranFee { get; set; }

    /// <summary>
    /// 邮电费
    /// </summary>
    public decimal? PostFee { get; set; }

    /// <summary>
    /// 账面余额
    /// </summary>
    public decimal? AcctBalance { get; set; }

    /// <summary>
    /// 用途,附言
    /// </summary>
    public string Purpose { get; set; }

    /// <summary>
    /// 摘要
    /// </summary>
    public string AbstractStr { get; set; }

    /// <summary>
    /// 代理人户名
    /// </summary>
    public string ProxyPayName { get; set; }

    /// <summary>
    /// 代理人账号
    /// </summary>
    public string ProxyPayAcc { get; set; }

    /// <summary>
    /// 代理人银行名称
    /// </summary>
    public string ProxyPayBankName { get; set; }

    /// <summary>
    /// 主机日期
    /// </summary>
    public string HostDate { get; set; }

    /// <summary>
    /// 交易流水号
    /// </summary>
    public string TranSeqNo { get; set; }

    /// <summary>
    /// 备注1
    /// </summary>
    public string Remark1 { get; set; }

    /// <summary>
    /// 备注2
    /// </summary>
    public string Remark2 { get; set; }

    /// <summary>
    /// 被冲正标志
    /// </summary>
    public string BeReverseFlag { get; set; }

    /// <summary>
    /// 时序时间
    /// </summary>
    public string SeqTime { get; set; }

    /// <summary>
    /// 费用代码
    /// </summary>
    public string FeeCode { get; set; }

    /// <summary>
    /// 电子回单
    /// </summary>
    public string ElecBillUrl { get; set; }

    /// <summary>
    /// 随机密码
    /// </summary>
    public string RandomPwd { get; set; }

    /// <summary>
    /// 文档Id
    /// </summary>
    public string DocID { get; set; }

    public WalletTransactionStatusEnum? Status { get; set; }
}

public class OperateWalletAmountBaseInput
{


    /// <summary>
    /// 业务流水号
    /// </summary>
    [DisplayName("业务流水号")]
    [MaxLength(20, ErrorMessage = "{0}最大长度为{1}")]
    public string BussSeqNo { get; set; }

    /// <summary>
    /// 付款人账户 扣款账户(止付状态的账户)
    /// </summary>
    [DisplayName("付款人账户")]
    [MaxLength(20, ErrorMessage = "{0}最大长度为{1}")]
    [Required]
    public string OutAcctNo { get; set; }

    /// <summary>
    /// 付款人名称 付款账户户名
    /// </summary>
    [DisplayName("付款人名称")]
    [MaxLength(60, ErrorMessage = "{0}最大长度为{1}")]
    [Required]
    public string OutAcctName { get; set; }

    /// <summary>
    /// 付款行名称
    /// </summary>
    public string OutBankName { get; set; }

    /// <summary>
    /// 操作类型
    /// </summary>
    [DisplayName("操作类型")]
    [EnumValidation(typeof(WalletAmountOperateTypeEnum), ErrorMessage = "{0}异常")]
    public WalletAmountOperateTypeEnum AmountOperateType { get; set; }

    /// <summary>
    /// 操作的金额类型
    /// </summary>
    [DisplayName("操作金额类型")]
    [EnumValidation(typeof(WalletOperateAmountTypeEnum), ErrorMessage = "{0}异常")]
    public WalletOperateAmountTypeEnum OperateAmountType { get; set; }

    /// <summary>
    /// 业务类型
    /// </summary>
    [DisplayName("业务类型")]
    [EnumValidation(typeof(WalletDetailBusinessTypeEnum), ErrorMessage = "{0}异常")]
    public WalletDetailBusinessTypeEnum BusinessType { get; set; }

    /// <summary>
    /// 收款方账户
    /// </summary>
    [DisplayName("目标账户")]
    [MaxLength(32, ErrorMessage = "{0}最大长度为{1}")]
    [Required]
    public string InAcctNo { get; set; }

    /// <summary>
    /// 收款方账户户名
    /// </summary>
    [DisplayName("目标账户户名")]
    [MaxLength(60, ErrorMessage = "{0}最大长度为{1}")]
    [Required]
    public string InAcctName { get; set; }

    /// <summary>
    /// 收入账户的账户类型
    /// </summary>
    public TransAccountTypeEnum InAccountType { get; set; }

    /// <summary>
    ///  收款方行名
    /// </summary>

    public string InBankName { get; set; }

    /// <summary>
    /// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
    /// </summary>
    [DisplayName("转出金额")]
    [Required]
    [Range(0.01, double.MaxValue, ErrorMessage = "金额异常")]
    public decimal TranAmount { get; set; }

    /// <summary>
    /// 资金用途 100个汉字,对方能否看到此用途视收款方银行的支持。
    /// </summary>
    [MaxLength(100, ErrorMessage = "{0}最大长度为{1}")]
    [DisplayName("资金用途")]
    public string UseEx { get; set; }

    /// <summary>
    /// 初始交易状态
    /// </summary>
    [DisplayName("初始交易状态")]
    [EnumValidation(typeof(WalletTransactionStatusEnum), ErrorMessage = "{0}异常")]
    public WalletTransactionStatusEnum Status { get; set; }

    /// <summary>
    /// 企业合同
    /// </summary>
    public string ContractUrl { get; set; }
}

public class OperateWalletAmountInput : OperateWalletAmountBaseInput
{
    /// <summary>
    /// 用户Id
    /// </summary>
    public Guid UserId { get; set; }

    /// <summary>
    /// 付款账户 选择支付宝与银行卡
    /// </summary>
    [DisplayName("付款账户")]
    [Required(ErrorMessage = "{0}不能为空")]
    public WalletAccountTypeEnum WalletAccountType { get; set; }

    public Guid WalletMainId { get; set; }
}

public class OperateBatchWalletAmountInput
{
    /// <summary>
    /// 用户Id
    /// </summary>
    public Guid UserId { get; set; }

    /// <summary>
    /// 付款账户 选择支付宝与银行卡
    /// </summary>
    [DisplayName("付款账户")]
    [Required(ErrorMessage = "{0}不能为空")]
    public WalletAccountTypeEnum WalletAccountType { get; set; }

    /// <summary>
    /// 操作明细
    /// </summary>
    public List<OperateWalletAmountBaseInput> OperateWalletAmountDetails { get; set; }
}

public class CalculationWalletPayFeeInput
{
    public decimal Amount { get; set; }

    /// <summary>
    /// 钱包类型
    /// </summary>
    public WalletAccountTypeEnum WalletAccountType { get; set; }

}