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

import java.util.Set;

/**
 * 任务对象常量。
 */
public final class ProjectTaskConstants {

    private ProjectTaskConstants() {
    }

    /**
     * 任务对象类型，对应 rdms_object_status_model.object_type。
     */
    public static final String OBJECT_TYPE = "task";

    /**
     * 任务"已完成"状态码，对应 rdms_object_status_model 中 object_type='task' 且 status_code='completed' 的状态。
     * 用于 execution 的 complete 按钮可见性判定：要求根任务在排除排除集后全部为该状态。
     */
    public static final String STATUS_COMPLETED = "completed";

    /**
     * 任务业务类型。
     */
    public static final String BIZ_TYPE = "project_task";

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

    /**
     * 创建任务权限码。
     */
    public static final String PERMISSION_CREATE = "project:task:create";

    /**
     * 编辑任务权限码。
     */
    public static final String PERMISSION_UPDATE = "project:task:update";

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

    /**
     * 任务协办人维护权限码。
     */
    public static final String PERMISSION_ASSIGNEE = "project:task:assignee";

    /**
     * 任务工时维护权限码。
     */
    public static final String PERMISSION_WORKLOG = "project:task:worklog";

    /**
     * 删除任务权限码。
     * 推荐挂"项目负责人"角色（参见 docs/项目/2026-05-11-执行按钮可见度对齐设计.md §6.4）。
     * 实际拦截：项目负责人 / 执行负责人 / 任务负责人 / 父任务负责人直接放行；
     * 不命中业务身份时回落本权限码，作为管理员兜底。
     */
    public static final String PERMISSION_DELETE = "project:task:delete";

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

}
