package cn.axzo.workflow.core.common.enums;

import cn.axzo.framework.domain.web.code.IProjectRespCode;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @Author: liyong.tian
 * @Date: 2022/9/5
 * @Description: 响应码规范：一共8位，取值范围0~9，3位项目编号(首位不能为0)+2位模块编号+3位自定义编号
 */
@Getter
@AllArgsConstructor
public enum BpmnErrorCode implements IProjectRespCode {
    // ========== category              01-001 ==========
    CATEGORY_VALUE_EXISTS("01001", "分类值【{}】已经存在"),
    CATEGORY_ID_NOT_EXISTS("01002", "指定分类【{}】不存在"),
    // ========== convertor             02-001 ==========
    CONVERTOR_UNKNOW_NODE_TYPE("02001", "节点类型【{}】暂不支持"),
    CONVERTOR_META_DATA_FORMAT_ERROR("02002", "JSON 数据格式有误"),
    CONVERTOR_COMMON_ERROR("02003", "JSON 转 BPMN 失败, 原因:【{}】"),
    CONVERTOR_NODE_TYPE_NOT_SUPPORT("02004", "【{}】节点类型, ID:【{}】暂不支持"),


    // ========== bpmn model                 03-001 ==========
    MODEL_KEY_EXISTS("03001", "已经存在流程标识为【{}】的流程"),
    MODEL_ID_NOT_EXISTS("03002", "流程模型ID【{}】不存在"),
    MODEL_KEY_NOT_EXISTS("03003", "流程模型KEY【{}】不存在"),
    MODEL_NOT_EXISTS("03004", "流程模型不存在"),
    BPMN_BYTES_NOT_EXISTS("03005", "模型定义内容字节码不存在"),

    // ========== bpmn processDefinition     04-001 ==========
    PROCESS_DEFINITION_BPMN_NOT_EXISTS("04001", "模型ID【{}】的定义内容不存在"),
    PROCESS_DEFINITION_ID_NOT_EXISTS("04002", "流程定义ID【{}】不存在"),
    PROCESS_DEFINITION_DEPLOY_ID_NOT_EXISTS("04003", "流程定义部署ID【{}】不存在"),
    PROCESS_DEFINITION_KEY_NOT_EXISTS("04004", "流程定义KEY【{}】不存在"),
    PROCESS_DEFINITION_RESULT_TOO_MANY("04005", "租户【{}】中存在多条分类为【{}】的流程定义,不允许直接变更状态"),
    PROCESS_DEFINITION_IS_SUSPENDED("04006", "流程定义KEY【{}】处于挂起状态"),
    PROCESS_DEFINITION_KEY_NOT_MATCH("04007", "流程定义的标识不一致, 请修改 BPMN 流程图"),
    PROCESS_DEFINITION_NAME_NOT_MATCH("04008", "流程定义的名字期望是({})，当前是({})，请修改 BPMN 流程图"),
    //             "数据出现异常,同一个工作台下,同一个所属分类,只能有一个流程定义"),
    // ========== bpmn processInstance       05-001 ==========
    PROCESS_OPERATION_PARAM_VALID_ERROR("05001", "参数缺失, 请确保传入了 ID 或 businessKey 对流程实例进行操作"),
    PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS("05002", "流程取消失败，流程不处于运行中"),
    PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF("05003", "流程取消失败，该流程不是你发起的"),
    PROCESS_INSTANCE_NOT_EXISTS("05004", "流程实例不存在或已结束"),
    PROCESS_INSTANCE_ID_NOT_EXISTS("05005", "流程实例【{}】不存在"),
    PROCESS_INSTANCE_CANCELLED("05006", "流程实例已取消"),
    // ========== bpmn task                  06-001 ==========
    TASK_COMPLETE_FAIL_NOT_EXISTS("06001", "未找到指定审批任务"),
    TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF("06002", "该任务的审批人不是你"),
    TASK_APOSTILLE_NOT_SUPPORT("06003", "当前加签模式不支持"),
    TASK_REMIND_ERROR_NOT_EXISTS("06004", "当前审批节点没有待审批任务, 不能催办"),

    // ========== form Model              07-001 ==========
    FORM_MODEL_NOT_EXISTS("07001", "表单模型不存在"),
    FORM_MODEL_ID_NOT_EXISTS("07002", "表单模型ID【{}】不存在"),
    // ========== form Definition         08-001 ==========
    FORM_DEFINITION_NOT_EXISTS("08001", "表单定义内容转换出错, 建议重新修改表单定义后重试"),
    FORM_DEFINITION_PARSER_ERROR("08002", "表单定义内容解析出错"),
    // ========== form Instance           09-001 ==========
    // ========== flowable Engine         10-001 ==========
    ENGINE_EXECUTION_LOST_ID_ERROR("10001", "Execution 丢失"),


    //    // ========== 流程模型 01-001 ==========
    //
    //
    //    MODEL_KEY_VALID("9002002",
    //            "流程标识格式不正确，需要以字母或下划线开头，后接任意字母、数字、中划线、下划线、句点！"),
    //    MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG("9002003",
    //            "部署流程失败，原因：流程表单未配置，请点击【修改流程】按钮进行配置"),
    //    MODEL_DEPLOY_FAIL_TASK_ASSIGN_RULE_NOT_CONFIG("9002004", "部署流程失败，" +
    //            "原因：用户任务({})未配置分配规则，请点击【配置审核人】按钮进行配置"),
    //    MODEL_DEPLOY_FAIL_TASK_INFO_EQUALS("9003005", "流程定义部署失败，原因：信息未发生变化"),
    //
    //    // ========== 流程定义 1-009-003-000 ==========
    //
    //
    //    PROCESS_DEFINITION_NOT_EXISTS("9003002", "流程定义不存在"),
    //
    //    PROCESS_DEFINITION_BPMN_MODEL_NOT_EXISTS("9003004", "流程定义的模型不存在"),
    //
    //    // ========== 流程实例 1-009-004-000 ==========
    //
    //
    //    // ========== 流程任务 1-009-005-000 ==========
    //
    //
    //    // ========== 流程任务分配规则 1-009-006-000 ==========
    //    TASK_ASSIGN_RULE_EXISTS("9006000", "流程({}) 的任务({}) 已经存在分配规则"),
    //    TASK_ASSIGN_RULE_NOT_EXISTS("9006001", "流程任务分配规则不存在"),
    //    TASK_UPDATE_FAIL_NOT_MODEL("9006002", "只有流程模型的任务分配规则，才允许被修改"),
    //    TASK_CREATE_FAIL_NO_CANDIDATE_USER("9006003", "操作失败，原因：找不到任务的审批人！"),
    //    TASK_ASSIGN_SCRIPT_NOT_EXISTS("9006004", "操作失败，原因：任务分配脚本({}) 不存在"),
    //    TASK_ASSIGN_GET_USER_ERROR("9006005", "通过【{}】获取任务候选人失败，失败原因：{}"),
    //    USER_COMPANY_ID_NOT_EXISTS("9006006", "缺失所在单位信息"),
    //    TASK_ASSIGN_USER_NOT_ENOUGH("9006007", "操作失败，原因：候选人数量{}小于循环基数{}"),
    //
    //    // ========== 动态表单模块 1-009-010-000 ==========
    //    FORM_NOT_EXISTS("9010000", "动态表单不存在"),
    //    FORM_FIELD_REPEAT("9010001", "表单项({}) 和 ({}) 使用了相同的字段名({})"),
    //    FORM_CONFIG_ERROR("9010002", "内置表单解析失败"),
    //
    //    FORM_CONFIG_ID_NOT_EXISTS("9010003", "修改/删除业务表单时，ID不能为空"),
    //
    //    FORM_CONFIG_IN_USED("9010004", "表单正在使用中，不能删除"),
    //
    //    FORM_CONFIG_CATEGORY_EXIST("9010005", "当前所属业务已有绑定关系，不能重复新增"),
    //
    //    FORM_FIELD_DECODE_ERROR("9010006", "表单Field格式不正确"),
    //
    //    FORM_CONFIG_CATEGORY_NOT_EXIST("9010006", "表单信息不存在，请前往 配置管理->所属业务关联关系 添加表单绑定信息"),
    //
    //    // ========== 用户组模块 1-009-011-000 ==========
    //    USER_GROUP_NOT_EXISTS("9011000", "用户组不存在"),
    //    USER_GROUP_IS_DISABLE("9011001", "名字为【{}】的用户组已被禁用"),
    //
    //    // ========== 公共模板 1-009-012-000 ==========
    //    COMMON_ERROR("9012000", "{}"),
    //    COMMON_MODEL_EXISTS("9012001", "名字为【{}】的公共模型已经存在"),
    //    COMMON_MODEL_PROJECT_ID_NOT_EXISTS("9012002",
    //            "应用类型选择租户时, 关联的项目[tenants]不能为空"),
    //    COMMON_MODEL_FORM_CONFIG_NOT_EXISTS("9012003",
    //            "表单类型选择业务表单时, 业务表单不能为空"),
    //    COMMON_MODEL_ID_IS_NULL("9012004", "模型ID丢失, 请检查入参"),
    //    COMMON_MODEL_TASK_ASSIGN_RULE_EXISTS("9012005",
    //            "流程({}) 的任务({}) 已经存在分配规则"),
    //    COMMON_MODEL_TASK_ASSIGN_RULE_NOT_EXISTS("9012006", "流程任务分配规则不存在"),
    //    COMMON_MODEL_TASK_ASSIGN_RULE_TYPE_ILLEGAL("9012007",
    //            "({}) 的应用范围，不能配置 ({}) 审配人类型"),
    //    COMMON_MODEL_FORM_FIELD_PERMISSION("9012008",
    //            "HTML 标签 ID 为 ({})和 Label 为 ({})的表单项配置权限信息只能只读/隐藏二选一，且不能为空"),
    //    FORM_CONFIG_REGISTER_INFO_NOT_EXISTS("9012009", "未获取到该业务表单的配置信息"),
    //    COMMON_MODEL_PROCESS_FORM_NOT_EXISTS("9012010", "流程表单已被删除, 请重新选择"),
    //    GET_REMOTE_WORKSPACE_INFO_ERROR("9012011", "调用远程接口出现异常, 接口: {}"),
    //    COMMON_MODEL_ASSIGN_DATA_NOT_EXISTS("9012012", "模板数据异常,未获取到租户"),
    //    COMMON_MODEL_NOT_EXISTS("9012013",
    //            "流程模型模板不存在,或者模型未配置 BPMN 流程"),
    //    BPM_PROCESS_DEFINITION_NOT_EXISTS("9012014",
    //            "未查询到可以用于发起工作流的流程定义ID, 请确认工作台与所属分类是否匹配"),
    //
    //
    //    FORM_NOT_ENABLE("9012016", "表单已经不可用"),
    //    ILLEGAL_FORM_DATA("9012017", "表单类型数据异常, 非法数据"),
    //    BPMN_XML_NOT_EXISTS("9012018", "BPMN 文件内容不存在,将终止发布"),
    //    BPMN_XML_NOT_VALID("9012019", "BPMN 文件内容不合法,将终止发布"),
    //    DEPLOY_TENANTS_NOT_EXISTS("9012020", "当前模型中未选择应用范围,将终止发布"),
    //    DEPLOY_FORM_CONFIG_NOT_EXISTS("9012021", "当前模型中未关联表单,将终止发布"),
    //    DEPLOY_OPTIONS_NOT_EXISTS("9012022", "当前模型中[{}]任务未分配审核人,将终止发布"),
    //    DEPLOY_SOURCE_NOT_EXISTS("9012023", "流程模型原数据丢失,将终止发布"),
    //    GET_REMOTE_DATE_ERROR("9012024", "调用远程接口 [{}] 发生异常: {}"),
    //    PARTICIPATED_DATA_IS_EMPTY("9012025",
    //            "当前 [{}] 项目工作台(WorkspaceId={})下未获取到参与单位信息"),
    //    PARTICIPATED_TYPE_DATA_IS_EMPTY("9012026",
    //            "当前 [{}] 项目工作台(WorkspaceId={})下未获取到{}数据"),
    //    GET_SUPERIOR_UNIT_ID_ERROR("9012027", "获取上级执行单位信息异常"),
    //    MODEL_POOL_CANT_DEPLOY("9012028", "模型已不部署,无需重复发布"),
    //    PROCESS_DEFINITION_IS_SUSPENDED_CANT_DEPLOY("9012029",
    //            "模型处于挂起状态,无法发布"),
    //
    //
    //    FLOWABLE_GENERAL_ERROR("9013000", "流程引擎一般错误"),
    //    FLOWABLE_ENGINE_OBJECT_NOT_FOUND("9013001", "流程引擎内部错误：流程定义未找到"),
    //    FLOWABLE_WRONG_DB("9013002", "数据库版本与流程引擎版本不匹配"),
    //    FLOWABLE_DB_OPTIMISTIC_LOCKING("9013003", "引擎内部数据乐观锁死锁"),
    //    FLOWABLE_TASK_ALREADY_CLAIMED("9013004", "当前审批任务已有审批人"),
    //    FLOWABLE_ILLEGAL_STATE("9013005", "审批流状态异常"),
    //    FLOWABLE_ILLEGAL_ARGUMENT("9013006", "流程引擎存在非法参数"),
    //    FLOWABLE_FORBIDDEN("9013007", "当前流程引擎禁止访问"),
    //    FLOWABLE_CLASS_LOADING_ERROR("9013008", "流程引擎加载异常"),
    //
    //
    //    USER_NOT_EXISTS("01001", "用户不存在，id=%s"),
    //    USER_PHONE_EMAIL_IS_NULL("01002", "电话和邮箱不能都为空");
    ;

    private String code;
    private String message;

    @Override
    public String getProjectCode() {
        // 根据不同项目进行项目编码调整，可联系框架组获取项目编号(首位不能为0)
        return "100";
    }

    public void setCode(String code) {
        this.code = code;
    }


    public void setMessage(String message) {
        this.message = message;
    }
}
