package org.springblade.openapi.mk.pojo.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.stream.Stream;

/**
 *  流程操作类型枚举
 * @author bfhuange
 * @since 2024/11/23
 */
@AllArgsConstructor
@Getter
public enum ProcessOperationType {
    /**
     *  起草人协同
     */
    DRAFTER_COOPERATE("drafter_cooperate", "起草人协同"),
    /**
     *  起草人取消协同
     */
    DRAFTER_CANCEL_DRAFT_COOPERATE("drafter_cancelDraftCooperate", "起草人取消协同"),
    /**
     *  协同接收人-回复协同
     */
    HANDLER_REPLY_DRAFT_COOPERATE("handler_replyDraftCooperate", "协同接收人-回复协同"),
    /**
     *  起草人-提交
     */
    DRAFTER_SUBMIT("drafter_submit", "起草人-提交"),
    /**
     *  起草人-废弃
     */
    DRAFTER_ABANDON("drafter_abandon", "起草人-废弃"),
    /**
     *  起草人-撤回
     */
    DRAFTER_RETRACT("drafter_retract", "起草人-撤回"),
    /**
     *  审批人-通过
     */
    HANDLER_PASS("handler_pass", "审批人-通过"),
    /**
     *  审批人-驳回
     */
    HANDLER_REJECT("handler_reject", "审批人-驳回"),
    /**
     *  审批人-废弃
     */
    HANDLER_ABANDON("handler_abandon", "审批人-废弃"),
    /**
     *  审批人-撤回
     */
    HISTORY_HANDLER_RETRACT("historyHandler_retract", "审批人-撤回"),
    /**
     *  审批人-签字
     */
    HANDLER_SIGN("handler_sign", "审批人-签字"),
    /**
     *  审批人-转办
     */
    HANDLER_TRANSFER("handler_transfer", "审批人-转办"),
    /**
     *  审批人-分发
     */
    HANDLER_ASSIGN("handler_assign", "审批人-分发"),
    /**
     *  审批人-催办
     */
    HISTORY_HANDLER_URGE("historyHandler_urge", "审批人-催办"),
    /**
     *  审批人-沟通
     */
    HANDLER_COMMUNICATE("handler_communicate", "审批人-沟通"),
    /**
     *  审批人-回复沟通
     */
    HANDLER_REPLY_COMMUNICATE("handler_replyCommunicate", "审批人-回复沟通"),
    /**
     *  审批人-取消沟通
     */
    HANDLER_CANCEL_COMMUNICATE("handler_cancelCommunicate", "审批人-取消沟通"),
    /**
     *  审批人-补签
     */
    HANDLER_APPEND_SIGN("handler_appendSign", "审批人-补签"),
    /**
     *  审批人-加签
     */
    HANDLER_PREPEND_SIGN("handler_prependSign", "审批人-加签"),
    /**
     *  审批人(加签人)-取消加签
     */
    HANDLER_PREPEND_SIGN_CANCEL("handler_prependSignCancel", "审批人(加签人)-取消加签"),
    /**
     *  审批人(被加签人)-退回加签
     */
    HANDLER_PREPEND_SIGN_REFUSE("handler_prependSignRefuse", "审批人(被加签人)-退回加签"),
    /**
     *  审批人(被加签人)-通过加签
     */
    HANDLER_PREPEND_SIGN_PASS("handler_prependSignPass", "审批人(被加签人)-通过加签"),
    /**
     *  审批人(被加签人)-审批人-传阅
     */
    HANDLER_CIRCULATION("handler_circulation", "审批人(被加签人)-审批人-传阅"),
    /**
     *  特权人-前后跳转
     */
    ADMIN_JUMP("admin_jump", "特权人-前后跳转"),
    /**
     *  特权人-流程暂停
     */
    ADMIN_PROCESS_SUSPEND("admin_processSuspend", "特权人-流程暂停"),
    /**
     *  特权人-节点暂停
     */
    ADMIN_NODE_SUSPEND("admin_nodeSuspend", "特权人-节点暂停"),
    /**
     *  审批人-节点唤醒
     */
    HANDLER_NODE_RESUME("handler_nodeResume", "审批人-节点唤醒"),
    /**
     *  特权人-节点唤醒
     */
    ADMIN_NODE_RESUME("admin_nodeResume", "特权人-节点唤醒"),
    /**
     *  特权人-流程唤醒
     */
    ADMIN_PROCESS_RESUME("admin_processResume", "特权人-流程唤醒"),
    /**
     *  特权人-修改流程
     */
    ADMIN_MODIFY_PROCESS("admin_modifyProcess", "特权人-修改流程"),
    /**
     *  特权人-修改当前处理人
     */
    ADMIN_CHANGE_CUR_HANDLER("admin_changeCurHandler", "特权人-修改当前处理人"),
    /**
     *  特权人-终审通过
     */
    ADMIN_END("admin_end", "特权人-终审通过"),
    /**
     * 特权人-直接废弃
     */
    ADMIN_ABANDON("admin_abandon", "特权人-直接废弃"),
    ;
    /**
     *  编码
     */
    private final String code;
    /**
     *  名称
     */
    private final String name;

    /**
     *  流程结束，mk没有这个操作，但是有这个事件，自定义一个操作类型，统一管理
     */
    public static final String PROCESS_FINISH = "erp_process_finish";

    /**
     *  根据操作编码获取名称
     * @param code
     * @return
     */
    public static String getOperationName(String code) {
        return Stream.of(values())
                .filter(type -> type.getCode().equals(code))
                .findFirst()
                .map(ProcessOperationType::getName)
                .orElse(null);
    }
}
