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

import com.gci.boot.modules.monitor.enums.DirectionEnum;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

public enum  RepairStatusChangeEvent {

    //      运营维保部  维修厂    运营维保部   领导审批   维修厂    运营维保部    结束
    //  1      2       3         4          5         6        7         8
    //待提交 - 待派单 - 待报价 - 待审核报价 - 待审批报价 - 维修中 - 待确认结果 - 已归档
    //    提交->   派单->   报价->  审核(员工)->  审批(领导)->完成维修-> 结果完成
    //                            审核不通过    审核不通过            结果未完成
    //                            超过两千

    // 1          2       3      4       5
    //运营维保部  维修厂  领导审批   结束   部门审批

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

    /**
     * 在 待审核报价 后面加一个 审核审批 的节点-10 待复核
     */
    //待提交 - 待派单 - 待报价 - 待审核报价 - <审核审批>- 待审批报价 - 维修中 - 待确认结果 - 已归档

    /**
     *提交
     */
    SUBMIT(1,1,2,1),
    /**
     *派单
     */
    SEND(2,1,3,2),
    /**
     *派单--质保期内的--直接到维修中
     */
    SEND_GUARANTEE(2,-1,6,2),
    /**
     *报价
     */
    OFFER(3,1,4,1),
    /**
     *审核通过(员工)
     */
    EMPLOYEE_PASS(4,1,10,5),
    /**
     *审核不通过(员工)
     */
    EMPLOYEE_NO_PASS(4,2,3,2),

    /**
     * 审核审批--通过
     */
    EMPLOYEE_PASS_ADD(10,1,6,2),
    /**
     * 审核审批--超过两千
     */
    EMPLOYEE_PASS_2k_ADD(10,2000,5,3),
    /**
     *审核审批--不通过
     */
    EMPLOYEE_NO_PASS_ADD(10,2,4,1),

    /**
     *审核通过(领导)
     */
    LEADER_PASS(5,1,6,2),
    /**
     *审核不通过(领导)
     */
    LEADER_NO_PASS(5,2,10,5),
    /**
     *完成维修
     */
    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;

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

    public static RepairStatusChangeEvent 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 (RepairStatusChangeEvent event : RepairStatusChangeEvent.values()) {
            if (event.getFlowStatus().equals(flowStatus) && event.getCheckFlag().equals(checkFlag)) {
                return event;
            }
        }
        return null;
    }

}
