package com.gci.boot.modules.vehicles.enums;

import lombok.Getter;

public enum UpkeepStatusChangeEvent {

    //            2         3         4        6        7          8        9
    //流程状态：   待委派     待报价    待审核     保养中    待确认      结束     作废
    //流程节点：  运营维保部   维修厂   运营维保部   维修厂   运营维保部   结束     结束
    //             1         2         1        2         1        4       4

    //待委派     待报价    待审核     保养中    待确认      结束
    //    派单->   报价->      审核->    完成保养->  结果完成
    //                       审核不通过           结果未完成

    // 审核状态   1-》通过， 2-》不通过  checkFlag

    /**
     * 在 待审核报价 后面加一个 审核审批 的节点-10 待复核
     */
    //待委派     待报价    待审核    待复核     保养中    待确认      结束
    /**
     *派单
     */
    SEND(2,1,3,2),
    /**
     *报价
     */
    OFFER(3,1,4,1),
    /**
     *审核通过
     */
    PASS(4,1,10,1),
    /**
     *审核不通过
     */
    NO_PASS(4,2,3,2),

    /**
     *审核审批--通过
     */
    PASS_ADD(10,1,6,2),
    /**
     *审核审批--不通过
     */
    NO_PASS_ADD(10,2,4,1),
    /**
     *完成保养
     */
    REPAIR_FINISH(6,1,7,1),
    /**
     *结果完成(归档)
     */
    RESULT_PASS(7,1,8,4),
    /**
     *结果未完成(回维修中)
     */
    RESULT_NO_PASS(7,2,6,2);


    @Getter
    private Integer flowStatus;

    @Getter
    private Integer checkFlag;

    @Getter
    private Integer nextFlowStatus;

    @Getter
    private Integer nextNode;

    UpkeepStatusChangeEvent(Integer flowStatus, Integer checkFlag, Integer nextFlowStatus, Integer nextNode) {
        this.flowStatus = flowStatus;
        this.checkFlag = checkFlag;
        this.nextFlowStatus = nextFlowStatus;
        this.nextNode = nextNode;
    }


    public static UpkeepStatusChangeEvent getEnum(Integer flowStatus, Integer checkFlag){

//        Optional<RepairStatusChangeEvent> any = Arrays.stream(RepairStatusChangeEvent.class.getEnumConstants())
//                .filter(e -> e.getFlowStatus()==flowStatus && e.getCheckFlag() == checkFlag).findAny();
//        if (any.isPresent()){
//            return any.get();
//        }

        for (UpkeepStatusChangeEvent event : UpkeepStatusChangeEvent.values()) {
            if (event.getFlowStatus().equals(flowStatus) && event.getCheckFlag().equals(checkFlag)) {
                return event;
            }
        }
        return null;
    }


}
