package com.ruoyi.common.pay.tm.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 交易结果
 * @author qzz
 * 2024/9/24
 */
@Getter
@AllArgsConstructor
public enum TmPayStatus {

    SUCCESS("SUCCESS", "支付成功"),
    NOTPAY("NOTPAY", "未支付"),
    CLOSE("CLOSE", "已关闭"),
    REVOKED("REVOKED", "已撤销"),
    USERPAYING("USERPAYING", "用户支付中"),
    PAYERROR("PAYERROR", "支付失败"),
    REFUND("REFUND", "转入退款"),
    OPERATE_SUCCESS("OPERATE_SUCCESS", "预授权请求操作成功"),
    OPERATE_FAIL("OPERATE_FAIL", "预授权请求操作失败"),
    OPERATE_SETTLING("OPERATE_SETTLING", "押金消费已受理"),
    REVOKED_SUCCESS("REVOKED_SUCCESS", "预授权请求撤销成功");

    private final String code;
    private final String description;

    /**
     * 判断支付状态是否成功
     * @param code 支付状态码
     * @return 是否成功
     */
    public static boolean isSuccess(String code) {
        return SUCCESS.getCode().equals(code);
    }

    /**
     * 判断支付状态是否成功
     * @param status 支付状态
     * @return 是否成功
     */
    public static boolean isSuccess(TmPayStatus status) {
        return status != null && SUCCESS.getCode().equals(status.getCode());
    }

    /**
     * 判断支付状态是否转入退款
     * @param code 支付状态码
     * @return 是否成功
     */
    public static boolean isRefund(String code) {
        return REFUND.getCode().equals(code);
    }

    /**
     * 根据状态码获取对应的支付状态
     * @param code 支付状态码
     * @return 对应的PayStatus枚举
     */
    public static TmPayStatus getByCode(String code) {
        for (TmPayStatus status : TmPayStatus.values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }
}


