using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using NPOI.SS.Formula.Functions;

namespace Hncore.Pass.PaymentCenter.Domain
{
    /// <summary>
    /// 支付状态
    /// </summary>
    /// 
    public enum PaymentStatus
    {
        /// <summary>
        /// 未支付
        /// </summary>
        [Display(Name = "未支付")] NotPay = 10,

        /// <summary>
        /// 已支付
        /// </summary>
        [Display(Name = "已支付")] OkPay = 20,

        /// <summary>
        /// 过期
        /// </summary>
        [Display(Name = "过期")] Expire = 30,

        /// <summary>
        /// 支付失败
        /// </summary>
        [Display(Name = "支付失败")] Fail = 40,

        /// <summary>
        /// 支付成功,回调失败
        /// </summary>
        [Display(Name = "支付成功,回调失败")] CallbackFail = 50,

        /// <summary>
        /// 支付中
        /// </summary>
        [Display(Name = "支付中")] Paying = 60
    }

    /// <summary>
    /// 支付类型
    /// </summary>
    public enum PaymentType
    {
        [Display(Name = "未知")] None = 0,

        /// <summary>
        /// 线下支付-现金
        /// </summary>
        [Display(Name = "线下支付-现金")] OfflinePayCash = 10,

        /// <summary>
        /// 线下支付-支票
        /// </summary>
        [Display(Name = "线下支付-支票")] OfflinePayCheck = 20,

        /// <summary>
        /// 线下支付-银行转账
        /// </summary>
        [Display(Name = "线下支付-银行转账")] OfflinePayBank = 30,

        /// <summary>
        /// 线下支付-pos机刷卡
        /// </summary>
        [Display(Name = "线下支付-pos机刷卡")] OfflinePayPOS = 40,

        /// <summary>
        /// 线下支付-支付宝直接转账
        /// </summary>
        [Display(Name = "线下支付-支付宝直接转账")] OfflinePayAlipay = 50,

        /// <summary>
        /// 线下支付-微信直接转账
        /// </summary>
        [Display(Name = "线下支付-微信直接转账")] OfflinePayWechat = 60,

        /// <summary>
        /// 线上支付-微信支付
        /// </summary>
        [Display(Name = "线上支付-微信支付")] OnlinePayWechart = 70,

        /// <summary>
        /// 线上支付-POS机储蓄卡刷卡
        /// </summary>
        [Display(Name = "线上支付-POS机储蓄卡刷卡")] OnlinePosDeposit = 80,

        /// <summary>
        /// 线上支付-POS机信用卡刷卡
        /// </summary>
        [Display(Name = "线上支付-POS机信用卡刷卡")] OnlinePosCredit = 90,

        /// <summary>
        /// 线上支付-支付宝
        /// </summary>
        [Display(Name = "线上支付-支付宝")] OnlineAlipay = 100,

        /// <summary>
        /// 其他支付方式
        /// </summary>
        [Display(Name = "其他支付方式")] Other = 250
    }

    /// <summary>
    /// 支付方式
    /// </summary>
    public enum PaymentMethod
    {
        None = 0,

        /// <summary>
        /// 微信付款码支付
        /// </summary>
        [Display(Name = "微信付款码")] WechatSwipeCardPay = 1,

        /// <summary>
        /// 微信扫码支付
        /// </summary>
        [Display(Name = "微信扫码")] WechatQrPay = 2,

        /// <summary>
        /// 支付宝付款码支付
        /// </summary>
        [Display(Name = "支付宝付款码")] AliSwipeCardPay = 3,

        /// <summary>
        /// 支付宝扫码支付
        /// </summary>
        [Display(Name = "支付宝付款码")] AliQrPay = 4,

        /// <summary>
        /// 微信公众号支付
        /// </summary>
        [Display(Name = "微信公众号支付")] WechatJsAppPay = 5,

        /// <summary>
        /// 支付宝服务窗支付
        /// </summary>
        [Display(Name = "支付宝服务窗支付")] AliJsPay = 6
    }

    /// <summary>
    /// 订单类型
    /// </summary>
    /// 
    public enum OrderType
    {
        /// <summary>
        /// 短信订单
        /// </summary>
        [Display(Name = "短信订单")] SmsOrder = 0,

        /// <summary>
        /// 产品订单
        /// </summary>
        [Display(Name = "产品订单")] Product = 1,

        /// <summary>
        /// 续费订单
        /// </summary>
        [Display(Name = "续费订单")] RenewProduct = 2,

        /// <summary>
        /// 物业缴费订单
        /// </summary>
        [Display(Name = "物业缴费订单")] Property = 3,

        /// <summary>
        /// 停车券订单
        /// </summary>
        [Display(Name = "停车券订单")] ParkingCoupon = 4,

        /// <summary>
        /// 月租车
        /// </summary>
        [Display(Name = "月租车订单")] MonthCar = 5,

        /// <summary>
        /// 增值服务
        /// </summary>
        [Display(Name = "增值服务")] NodeProduct = 6,

        /// <summary>
        /// 停车场临时缴费
        /// </summary>
        [Display(Name = "停车场临时缴费")] ParkingPay = 7,

        /// <summary>
        /// 其它缴费
        /// </summary>
        [Display(Name = "其它缴费")] Other = 255
    }

    /// <summary>
    /// 支付渠道
    /// </summary>
    public enum PaymentChannel
    {
        /// <summary>
        /// 全付通
        /// </summary>
        [Display(Name = "全付通")] QuanFuTong = 0,

        /// <summary>
        /// 汇旺财
        /// </summary>
        [Display(Name = "威富通")] WeiFuTong = 10,

        /// <summary>
        /// 信E付
        /// </summary>
        [Description("信E付")] EPay = 20,

        /// <summary>
        /// 银联聚合支付
        /// </summary>
        [Description("银联聚合支付")] UnionpayAggregateRoot = 30,

        /// <summary>
        /// 微信原生支付
        /// </summary>
        [Display(Name = "微信原生支付")] WxPay = 40,
    }

    /// <summary>
    /// 缴费方式（订单类别）
    /// </summary>
    public enum PayModel
    {
        /// <summary>
        /// 停车缴费（11-50）
        /// </summary>
        [Display(Name = "停车场临时缴费")] ParkingPay = 10,

        /// <summary>
        /// 停车场买卡（01-10）
        /// </summary>
        [Display(Name = "停车券订单")] ParkingCoupon = 20,

        ///// <summary>
        ///// 广告发布（51-70）
        ///// </summary>
        //[Display(Name = "广告订单")]
        //AdPay = 30,
        /// <summary>
        /// 物业缴费（71-99）
        /// </summary>
        [Display(Name = "物业收费订单")] PropertyPay = 40,

        /// <summary>
        /// 其他临时收费
        /// </summary>
        [Display(Name = "其它临时收费")] OtherPay = 50,

        /// <summary>
        /// 直接收费
        /// </summary>
        [Display(Name = "直接收费")] DirectPay = 60,

        /// <summary>
        /// 月租车订单
        /// </summary>
        [Display(Name = "月租车订单")] MonthCar = 70
    }

    /// <summary>
    /// 内部通知状态
    /// </summary>
    public enum CallbackStatus
    {
        /// <summary>
        /// 已创建
        /// </summary>
        [Display(Name = "未执行")] NoStart = 10,

        /// <summary>
        /// 执行中
        /// </summary>
        [Display(Name = "执行中")] InProcess = 20,

        /// <summary>
        /// 已完成
        /// </summary>
        [Display(Name = "已完成")] Finished = 30
    }
}