using Org.BouncyCastle.Asn1.Mozilla;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LifePayment.Domain.Shared;

public class UserWalletBalanceInfoOutput
{
    /// <summary>
    /// 是否开通该类型的钱包账户
    /// </summary>
    public bool IsWalletAccountOpen { get; set; }

    /// <summary>
    /// 钱包id
    /// </summary>
    public Guid? WalletMainId { get; set; }

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

    /// <summary>
    /// 户名
    /// </summary>
    public string AcctName { get; set; }


    /// <summary>
    /// 开户银行支行
    /// </summary>
    public string OpentBankNodeAddress { get; set; }

    /// <summary>
    /// 可用余额
    /// </summary>
    public decimal CanUseMoneyTotal { get; set; }

    /// <summary>
    /// 定向资金
    /// </summary>
    public decimal DirectMoneyTotal { get; set; }

    /// <summary>
    /// 发薪钱包
    /// </summary>
    public decimal SalaryMoneyTotal { get; set; }

    /// <summary>
    /// 不可用余额
    /// </summary>
    public decimal CanNotUseMoneyTotal { get; set; }

    /// <summary>
    /// 冻结余额
    /// </summary>
    public decimal FreezeMoneyTotal { get; set; }

    /// <summary>
    /// 资金总额
    /// </summary>
    public decimal AllMoneyTotal { get; set; }

    /// <summary>
    /// 银行名称
    /// </summary>
    public string BankName { get; set; }

    /// <summary>
    /// 根据钱包支付类型获取对应的总金额
    /// </summary>
    /// <param name="walletPayType"></param>
    /// <returns></returns>
    public decimal GetMoneyTotalByPayType(WalletPayTypeEnum walletPayType)
    {
        return walletPayType switch
        {
            WalletPayTypeEnum.CanUseMoney => this.CanUseMoneyTotal,
            WalletPayTypeEnum.DirectMoney => this.DirectMoneyTotal,
            WalletPayTypeEnum.SalaryMoney => this.SalaryMoneyTotal,
            _ => 0m
        };
    }
}

/// <summary>
/// 钱包账户类型开户信息
/// </summary>
public class WalletAccountTypeOpenInfoOutput
{
    public Guid? WalletAccountOpenId { get; set; }

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

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

    /// <summary>
    /// 账号名称
    /// </summary>
    public string AcctName { get; set; }

    /// <summary>
    /// 企业名称
    /// </summary>
    public string EnterpriseName { get; set; }

    /// <summary>
    /// 开户银行
    /// </summary>
    public string OpentBankNode { get; set; }

    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    public string SocietyCreditCode { get; set; }

    /// <summary>
    /// 是否开户
    /// </summary>
    public bool IsWalletAccountOpen { get; set; }

    /// <summary>
    /// 开户银行地址
    /// </summary>
    public string OpentBankNodeAddress { get; set; }

    /// <summary>
    /// 银行名称
    /// </summary>
    public string BankName { get; set; }
}

public class WalletBalanceDetailOutput
{


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

    /// <summary>
    /// 开户行
    /// </summary>
    public string BankName { get; set; }


    /// <summary>
    /// 银行卡资金总额
    /// </summary>
    public decimal? AllMoneyTotal { get; set; }

    /// <summary>
    /// 银行卡资金总额
    /// </summary>
    public decimal? BankMoneyTotal { get; set; }

    /// <summary>
    /// 银行卡昨日总余额
    /// </summary>
    public decimal? YesterdayBankMoneyTotal { get; set; }

    /// <summary>
    /// 支付宝账号
    /// </summary>
    public string AlipayAccount { get; set; }

    /// <summary>
    /// 支付宝余额
    /// </summary>
    public decimal? AlipayMoneyTotal { get; set; }

    /// <summary>
    /// 支付宝昨日总余额
    /// </summary>
    public decimal AlipayYesterdayMoneyTotal { get; set; }

    /// <summary>
    /// 银行冻结余额
    /// </summary>
    public decimal? BankFreezeMoneyTotal { get; set; }

    /// <summary>
    /// 支付宝冻结余额
    /// </summary>
    public decimal? AlipayFreezeMoneyTotal { get; set; }

    /// <summary>
    /// 钱包状态
    /// </summary>
    public WalletMainStatusEnum? Status { get; set; }


}

public class AllBankListOutput
{
    public int Id { get; set; }

    /// <summary>
    /// 首字母标记
    /// </summary>
    public string Mark { get; set; }

    /// <summary>
    /// 银行名称
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 是否是热门
    /// </summary>
    public int? IsHot { get; set; }
}

public class CheckUserWalletBalanceInfoOutput
{

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

    /// <summary>
    /// 户名
    /// </summary>
    public string AcctName { get; set; }


    /// <summary>
    /// 可用余额
    /// </summary>
    public decimal CanUseMoneyTotal { get; set; }

    /// <summary>
    /// 定向资金
    /// </summary>
    public decimal DirectMoneyTotal { get; set; }

    /// <summary>
    /// 发薪钱包
    /// </summary>
    public decimal SalaryMoneyTotal { get; set; }

    /// <summary>
    /// 不可用余额
    /// </summary>
    public decimal CanNotUseMoneyTotal { get; set; }

    /// <summary>
    /// 冻结余额
    /// </summary>
    public decimal FreezeMoneyTotal { get; set; }

    /// <summary>
    /// 资金总额
    /// </summary>
    public decimal AllMoneyTotal { get; set; }

    /// <summary>
    /// 根据钱包支付类型获取对应的总金额
    /// </summary>
    /// <param name="walletPayType"></param>
    /// <returns></returns>
    public decimal GetMoneyTotalByPayType(WalletPayTypeEnum walletPayType)
    {
        return walletPayType switch
        {
            WalletPayTypeEnum.CanUseMoney => this.CanUseMoneyTotal,
            WalletPayTypeEnum.DirectMoney => this.DirectMoneyTotal,
            WalletPayTypeEnum.SalaryMoney => this.SalaryMoneyTotal,
            _ => 0m
        };
    }
}

public class WalletPayChannelFeeSettingOutput
{
    public Guid WalletPayChannelId { get; set; }

    public decimal? BeginAmount { get; set; }

    public decimal? EndAmount { get; set; }

    public WalletPayChannelFeeCalculationTypeEnum FeeCalculationType { get; set; }

    public decimal FeeCalculationValue { get; set; }

    public Guid Id { get; set; }
}