package jnpf.attendance.schedule;

import org.slf4j.Logger;

/**
 * 自动排班主链路日志规范：与 {@link SchedulingForTestCheckLog} 一致，主链路里程碑用 {@link org.slf4j.Logger#error} 输出，便于线上仅开启 ERROR 时仍可检索。
 *
 * <p><b>检索</b>：日志统一带 {@link #MARKER}，可 grep {@code AUTO_SCHEDULE}。
 */
public final class AutoSchedulePipelineLog {

    /** 单行日志固定前缀（含方括号便于肉眼扫描）。 */
    public static final String MARKER = "[AUTO_SCHEDULE]";

    /** 流程起点：考勤组与时间区间 */
    public static final String PHASE_START = "START";
    /** 历史营业额与日排班快照条数（90 天窗口内实际返回数量） */
    public static final String PHASE_HISTORY_SNAPSHOT = "HISTORY_SNAPSHOT";
    /** 第四步：相似模版日映射 */
    public static final String PHASE_SIMILAR_DAYS = "SIMILAR_DAYS";
    /** 历史半小时用工行（仅成功模版日聚合） */
    public static final String PHASE_HALF_HOUR_TABLE = "HALF_HOUR_TABLE";
    /** 第五段：半小时 × 岗位需求矩阵 */
    public static final String PHASE_DEMAND_MATRIX = "DEMAND_MATRIX";
    /** 第六～八步：固定班贪心 + 划线覆盖 */
    public static final String PHASE_COVER_678 = "COVER_678";
    /** 由覆盖结果合成的班次计划块（匹配考勤班次前） */
    public static final String PHASE_SHIFT_PLAN_DRAFT = "SHIFT_PLAN_DRAFT";
    /** 考勤组班次时段匹配后的计划（不匹配块已剔除） */
    public static final String PHASE_ATTEND_SHIFT_MATCH = "ATTEND_SHIFT_MATCH";
    /** 在岗人员池（工作站带人）规模 */
    public static final String PHASE_WORKSTATION_POOL = "WORKSTATION_POOL";
    /** 第九～十步人员规则门面类型 */
    public static final String PHASE_STAFF_RULES = "STAFF_RULES";
    /** 最终选人一行摘要（班次块数、人数、需求/已选）；按班次/员工全文见 DEBUG。 */
    public static final String PHASE_PICK_SUMMARY = "PICK_SUMMARY";

    private AutoSchedulePipelineLog() {}

    public static void info(Logger log, String phase, String detail) {
        if (log == null || !log.isErrorEnabled()) {
            return;
        }
        log.error("{} phase={} | {}", MARKER, phase, detail);
    }

    public static void warn(Logger log, String phase, String detail) {
        if (log == null || !log.isErrorEnabled()) {
            return;
        }
        log.error("{} phase={} | {} | levelTag=WARN", MARKER, phase, detail);
    }
}
