package cn.sikey.hmd.enums;

import cn.hutool.core.util.ArrayUtil;
import cn.sikey.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * ali支付状态
 * WAIT_BUYER_PAY	交易创建，等待买家付款。
 * TRADE_CLOSED	未付款交易超时关闭，或支付完成后全额退款。
 * TRADE_SUCCESS	交易支付成功。
 * TRADE_FINISHED	交易结束，不可退款。
 */
@AllArgsConstructor
@Getter
public enum AlipayPayStatusEnum implements IntArrayValuable {

    TRADE_SUCCESS(1000, "支付成功"), TRADE_FINISHED(2000, "交易完成"), TRADE_CLOSED(3000, "交易关闭"), WAIT_BUYER_PAY(4000, "交易创建"),
    UNKNOWN_TRANSACTION_STATUS(5000, "未知交易状态");

    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AlipayPayStatusEnum::getValue).toArray();

    /**
     * value
     */
    private final Integer value;

    /**
     * name
     */
    private final String name;

    /**
     * 根据支付宝状态码获取枚举
     *
     * @param statusCode 支付宝返回的状态码（如 "TRADE_SUCCESS"）
     * @return 匹配的枚举值，未找到返回 null
     */
    public static AlipayPayStatusEnum fromStatusCode(String statusCode) {
        return Arrays.stream(values()).filter(e -> e.name().equals(statusCode)).findFirst().orElse(null);
    }

    public static AlipayPayStatusEnum valueOf(Integer value) {
        return ArrayUtil.firstMatch(alipayPayStatus -> alipayPayStatus.getValue().equals(value), AlipayPayStatusEnum.values());
    }

    @Override
    public int[] array() {
        return ARRAYS;
    }
}
