package com.ycwl.basic.pipeline.core;

import com.ycwl.basic.pipeline.annotation.StageConfig;

/**
 * 通用 Pipeline Stage 接口，每个 Stage 负责独立处理步骤。
 */
public interface PipelineStage<C extends PipelineContext> {

    /**
     * Stage 名称，用于日志与监控。
     */
    String getName();

    /**
     * 是否需要执行本 Stage。
     */
    boolean shouldExecute(C context);

    /**
     * 执行处理逻辑。
     */
    StageResult<C> execute(C context);

    /**
     * Stage 执行优先级，值越小优先级越高。
     */
    default int getPriority() {
        return 100;
    }

    /**
     * Stage 配置注解，便于读取元信息。
     */
    default StageConfig getStageConfig() {
        return this.getClass().getAnnotation(StageConfig.class);
    }
}
