package com.ycwl.basic.pipeline.core;

/**
 * 通用的 Pipeline 上下文接口。
 * 提供 Stage 开关控制与生命周期钩子，供不同业务场景复用。
 */
public interface PipelineContext {

    /**
     * 在 Pipeline 开始执行前调用，可用于埋点或预检查。
     */
    default void beforePipeline() {
        // 默认无操作
    }

    /**
     * 在 Pipeline 全部 Stage 执行完成且未抛出异常后调用。
     */
    default void afterPipeline() {
        // 默认无操作
    }

    /**
     * Pipeline 结束时的清理钩子，无论是否异常都会调用。
     */
    default void cleanup() {
        // 默认无操作
    }

    /**
     * 判断指定 Stage 是否启用。
     *
     * @param stageId Stage 唯一标识
     * @param defaultEnabled 配置缺失时的默认值
     * @return 是否启用
     */
    default boolean isStageEnabled(String stageId, boolean defaultEnabled) {
        return defaultEnabled;
    }

    /**
     * 判断指定 Stage 是否启用，默认关闭。
     *
     * @param stageId Stage 唯一标识
     * @return 是否启用
     */
    default boolean isStageEnabled(String stageId) {
        return false;
    }
}
