package com.spring.infra.batch;

import org.springframework.batch.core.Job;

/**
 * 배치 작업을 정의하는 추상 인터페이스입니다.
 * 
 * <p>이 인터페이스는 배치 작업의 초기화, 등록 및 생성과 관련된 메서드를 정의합니다.
 * 구현 클래스는 이 인터페이스를 구현하여 특정 배치 작업의 로직을 제공해야 합니다.</p>
 * 
 * <p>주요 메서드로는 배치 작업 정보를 초기화하고, 작업 빈을 등록하며,
 * 배치 작업을 생성하는 기능이 포함됩니다.</p>
 * 
 * @author mindol
 * @version 1.0
 */
public interface AbstractBatch {

    /**
     * 배치 작업 정보를 초기화합니다.
     * 
     * <p>배치 작업을 실행하기 전에 필요한 초기 설정을 수행합니다.</p>
     */
    void initializeBatchJobInfo();

    /**
     * 배치 작업에 필요한 빈을 등록합니다.
     * 
     * <p>배치 작업에서 사용할 JobBean을 등록하는 메서드입니다.</p>
     */
    void registerJobBean();

    /**
     * 배치 작업을 생성합니다.
     * 
     * <p>배치 작업을 생성하고 반환합니다.</p>
     * 
     * @return 생성된 Job 객체
     */
    Job createJob();

    /**
     * 스코프가 지정된 타겟 프리픽스를 제거합니다.
     * 
     * <p>주어진 빈 이름에서 "scopedTarget." 접두사를 제거하여 반환합니다.</p>
     * 
     * @param beanName 빈 이름
     * @return 수정된 빈 이름
     */
    default String removeScopedTargetPrefix(String beanName) {
        return beanName.startsWith("scopedTarget.") ? beanName.substring("scopedTarget.".length()) : beanName;
    }
}
