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

import java.util.Set;

/**
 * 执行对象常量。
 */
public final class ProjectExecutionConstants {

    private ProjectExecutionConstants() {
    }

    /**
     * 执行对象类型，对应 rdms_object_status_model.object_type。
     */
    public static final String OBJECT_TYPE = "execution";

    /**
     * 执行业务类型。
     */
    public static final String BIZ_TYPE = "project_execution";

    /**
     * 执行读路径查询权限码（对象域，object_type='project'）。
     * 覆盖执行对象所有读路径：page / status-board / detail。
     * "我参与 / 所有"视角由前端发不发 involveUserId 决定；进得来 = 看项目下全部，无此权限码直接 403。
     */
    public static final String PERMISSION_QUERY = "project:execution:query";

    /**
     * 创建执行权限码。
     */
    public static final String PERMISSION_CREATE = "project:execution:create";

    /**
     * 编辑执行权限码。
     */
    public static final String PERMISSION_UPDATE = "project:execution:update";

    /**
     * 执行负责人治理权限码。
     */
    public static final String PERMISSION_OWNER = "project:execution:owner";

    /**
     * 执行协办人治理权限码。
     */
    public static final String PERMISSION_ASSIGNEE = "project:execution:assignee";

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

    /**
     * 删除执行权限码。
     * 推荐挂"项目负责人"角色（参见 docs/项目/2026-05-11-执行按钮可见度对齐设计.md §6.4）。
     */
    public static final String PERMISSION_DELETE = "project:execution:delete";

    /**
     * 执行"已完成"状态码，对应 rdms_object_status_model 中 object_type='execution' 且 status_code='completed' 的状态。
     * 删除时拒绝主动删除（已完成的执行不允许删除）。
     */
    public static final String STATUS_COMPLETED = "completed";

    /**
     * 删除确认口令合法值集合；兼容大写英文 "DELETE" 与中文 "删除"，前端可纯中文文案。
     * 校验时精确匹配（trim 后比对）。
     */
    public static final Set<String> DELETE_CONFIRM_TEXTS = Set.of("DELETE", "删除");

}
