package com.yuchen.saas.payment.api.enums.allinpay;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;

/** 通联支付交易码
 * @author zhouhanwei
 * @create 2023/11/10 16:03
 */
@Getter
@AllArgsConstructor
public enum AllInPayTrxStatusEnum {
    /**
     * 0000：交易成功
     * 1001：交易不存在
     * 2008或者2000 : 交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易
     * 3开头的错误码代表交易失败
     * 3888-流水号重复
     * 3889-交易控制失败，具体原因看errmsg
     * 3099-渠道商户错误
     * 3014-交易金额小于应收手续费
     * 3031-校验实名信息失败
     * 3088-交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)
     * 3089-撤销异常,如已影响资金24小时内会做差错退款处理
     * 3045-其他错误，具体原因看errmsg
     * 3050-交易已被撤销
     * 3999-其他错误，具体原因看errmsg
     */
    SUCCESS("0000", "交易成功"),
    NON_EXISTENT("1001", "交易不存在"),
    PROCESSING_ONE("2000", "交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易"),
    PROCESSING_TWO("2008", "交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易"),
    SN_DUPLICATE("3888", "流水号重复"),
    CONTROL_FAILURE("3889", "交易控制失败"),
    CHANNEL_MERCHANT_ERROR("3099", "渠道商户错误"),
    TRANSACTION_AMOUNT_LESS_RECEIVABLE_FEE("3014", "交易金额小于应收手续费"),
    REAL_NAME_FAILURE("3031", "校验实名信息失败"),

    UNPAID("3088", "交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)"),
    CANCEL_ERROR("3089", "撤销异常"),
    OTHER_ERROR("3045", "其他错误，具体原因看errmsg"),
    REVOKED("3050", "交易已被撤销"),

    OTHER("3999", "其他错误，具体原因看errmsg"),

    ;

    private final String code;
    private final String desc;

    public static String getEnumDesc(String code) {
        if (StrUtil.isNotBlank(code)) {
            for (AllInPayTrxStatusEnum e : AllInPayTrxStatusEnum.values()) {
                if (e.getCode().equals(code)) {
                    return e.getDesc();
                }
            }
        }
        return null;
    }
}
