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

import com.njcn.rdms.module.project.constant.PersonalItemConstants;
import com.njcn.rdms.module.project.constant.ProjectExecutionConstants;
import com.njcn.rdms.module.project.constant.ProjectObjectConstants;
import com.njcn.rdms.module.project.constant.ProjectRequirementConstants;
import com.njcn.rdms.module.project.constant.ProjectTaskConstants;

/**
 * 临期/逾期告警的对象类型（告警域六档，代码写死的扫描清单）。
 *
 * <p>注意与状态机 object_type 区分：个人事项告警域是 personal_item、
 * 查终态时映射到状态机的 task（{@link PersonalItemConstants#STATUS_OBJECT_TYPE}）。
 * 告警记录表与提前量字典都用告警域 code，避免个人事项与任务互相污染去重记录。</p>
 */
public enum DueAlertObjectTypeEnum {

    PROJECT("project", "项目", ProjectObjectConstants.OBJECT_TYPE),
    PROJECT_REQUIREMENT("project_requirement", "项目需求", ProjectRequirementConstants.OBJECT_TYPE),
    /** 产品需求状态机 object_type 仓库无公开常量（ProductRequirementServiceImpl 内为 private），用字面值 */
    PRODUCT_REQUIREMENT("product_requirement", "产品需求", "product_requirement"),
    EXECUTION("execution", "执行", ProjectExecutionConstants.OBJECT_TYPE),
    TASK("task", "任务", ProjectTaskConstants.OBJECT_TYPE),
    PERSONAL_ITEM("personal_item", "个人事项", PersonalItemConstants.STATUS_OBJECT_TYPE);

    /** 告警域 code（告警记录表 object_type 列、提前量字典 value） */
    private final String code;
    /** 中文展示名（通知模板 objectTypeName 参数） */
    private final String displayName;
    /** 查终态用的状态机 object_type */
    private final String statusObjectType;

    DueAlertObjectTypeEnum(String code, String displayName, String statusObjectType) {
        this.code = code;
        this.displayName = displayName;
        this.statusObjectType = statusObjectType;
    }

    public String getCode() {
        return code;
    }

    public String getDisplayName() {
        return displayName;
    }

    public String getStatusObjectType() {
        return statusObjectType;
    }

}
