package com.njcn.rdms.module.project.constant;

import java.util.Set;

/**
 * 项目对象常量。
 */
public final class ProjectObjectConstants {

    private ProjectObjectConstants() {
    }

    /**
     * 项目对象类型，对应 rdms_user_object_role.object_type、rdms_object_status_model.object_type。
     */
    public static final String OBJECT_TYPE = "project";

    /**
     * 项目经理对象角色编码。该角色用于初始化与识别项目负责人。
     */
    public static final String MANAGER_ROLE_CODE = "project_manager";

    /**
     * 项目技术负责人对象角色编码。
     */
    public static final String TECHNICAL_OWNER_ROLE_CODE = "technical_owner";

    /**
     * 项目游客对象角色编码。创建人未成为项目成员时，用于返回只读上下文菜单。
     */
    public static final String VISITOR_ROLE_CODE = "visitor";

    /**
     * 产品主线项目类型字典值。后续字典值收敛后，只需调整这里。
     */
    public static final Set<String> MAINLINE_PROJECT_TYPE_CODES = Set.of("mainline", "main", "product_mainline", "主线");

    /**
     * 已作废项目状态编码。当前作废项目不占用产品主线项目名额。
     */
    public static final String STATUS_CANCELLED = "cancelled";

    /**
     * 项目自动编码前缀。
     */
    public static final String CODE_PREFIX = "CNPJ";

    /**
     * 项目查询权限码。
     */
    public static final String PERMISSION_QUERY = "project:project:query";

    /**
     * 项目编辑权限码。
     */
    public static final String PERMISSION_UPDATE = "project:project:update";

    /**
     * 项目成员维护权限码。
     */
    public static final String PERMISSION_MEMBER = "project:project:member";

    /**
     * 项目状态动作权限码。
     */
    public static final String PERMISSION_STATUS = "project:project:status";

    /**
     * 项目需求评审权限码。
     */
    public static final String PERMISSION_REVIEW = "project:project:review";

    /**
     * 项目拆分权限码。
     */
    public static final String PERMISSION_SPLIT = "project:project:split";

    /**
     * 项目删除权限码。
     */
    public static final String PERMISSION_DELETE = "project:project:delete";

    /**
     * 项目删除确认口令。
     */
    public static final String DELETE_CONFIRM_TEXT = "DELETE";

    /**
     * 可触发项目从待开始自动进入进行中的后端业务动作。
     */
    public static final Set<String> AUTO_START_TRIGGERS = Set.of(
            ObjectActivityConstants.PROJECT_TRIGGER_CREATE_EXECUTION,
            ObjectActivityConstants.PROJECT_TRIGGER_CREATE_TASK,
            ObjectActivityConstants.PROJECT_TRIGGER_SCHEDULE_REQUIREMENT,
            ObjectActivityConstants.PROJECT_TRIGGER_EXECUTION_AUTO_START);

}
