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;
import java.util.Optional;


/**
 * 核销方式类型
 */
@RequiredArgsConstructor
@Getter
public enum CheckTypeEnum implements IntArrayValuable {
    Gate(0, "闸机"),
    System(1, "后台"),
    PDA(2, "PDA"),
    Applet(3, "小程序"),
    Supplier(4, "供应商"),
    Timing(5, "定时任务"),
    Ren(6, "人工通道"),
    Single(7, "单资源"),
    Merchant(8, "商家"),
    GatePreCheck(9, "闸机预检");

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

    /**
     * 类型值
     */
    private final Integer type;
    /**
     * 类型名
     */
    private final String name;

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

    /**
     * 是否需要操作人
     * @param type 类型
     * @return 是否需要
     */
    public static boolean needOperatorId(Integer type) {
        return System.getType().equals(type) || PDA.getType().equals(type) || Applet.getType().equals(type)|| Merchant.getType().equals(type);
    }

    /**
     * 是否为设备检票
     * @param type 类型
     * @return 是否需要
     */
    public static boolean isMachine(Integer type) {
        return Gate.getType().equals(type) || PDA.getType().equals(type);
    }

    public static String getName(Integer type) {
        Optional<CheckTypeEnum> first = Arrays.stream(values()).filter(item -> item.type.equals(type)).findFirst();
        if (first.isPresent()) {
            return first.get().getName();
        }
        return "";
    }

    /**
     * 需要确认卡
     * @param type 类型
     * @return 是否需要
     */
    public static boolean needConfirmCard(Integer type) {
        return Gate.getType().equals(type);
    }
}