package com.yc.ship.module.trade.enums;


import com.yc.ship.framework.common.core.IntArrayValuable;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;

/**
 * 交易订单 - 状态
 *
 * @author qsl
 */
@RequiredArgsConstructor
@Getter
public enum TradeOrderStatusEnum implements IntArrayValuable {
    //主动取消、系统自动取消
    CANCELED(-2, "取消"),
    //供应商订单下单失败，造成订单失败
    FAIL(-1, "预定失败"),
    //通过规则、库存验证，等待供应商确认
    INIT(0, "待确认"),
    //已确认，等待支付
    UNPAID(1, "锁定"),
    PAYING(2, "未付款"),
    PAID(3, "已支付"),
    //供应商出票中
    PROCESSING(4, "预定中"),
    //供应商出票失败
    PROCESS_FAIL(5, "预定失败"),
    UNUSED(6, "锁定"),
    //部分核销
    PART_CHECK(7, "部分核销"),
    //全部核销
    ALL_CHECK(8, "全部核销"),
    //部分退款， > 部分核销
    PARTIAL_REFUND(9, "部分退款"),
    //退款中
    REFUNDING(10, "退款中"),
    //全部退款
    ALL_REFUND(11, "全部退款"),
    //订单未使用，但已不可整单退
    EXPIRED(12, "已过期"),
    //订单修改审核
    TRANSFER(13, "审核中"),
    YD(14, "留位"),
    CANCEL_AUDIT(15, "取消审核中");


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

    /**
     * 状态值
     */
    private final Integer status;
    /**
     * 状态名
     */
    private final String name;

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

    public static TradeOrderStatusEnum valueOf(Integer status){
        return Arrays.stream(TradeOrderStatusEnum.values()).filter(item->item.status.equals(status)).findFirst().get();
    }
}
