package incheon.com.config;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import incheon.com.cmm.util.EgovIdGnrBuilder;
import org.egovframe.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl;
import org.egovframe.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl;

/**
 * @ClassName : EgovConfigAppIdGen.java
 * @Description : IdGeneration 설정 (사용하는 것만 정리)
 *
 * @author : 윤주호
 * @since  : 2021. 7. 20
 * @version : 1.0
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일              수정자               수정내용
 *  -------------  ------------   ---------------------
 *   2021. 7. 20    윤주호               최초 생성
 *   2024. XX. XX   개선작업             불필요한 ID 생성기 정리
 * </pre>
 *
 */
@Configuration
public class EgovConfigAppIdGen {
	@Autowired
	@Qualifier("dataSource")
	DataSource dataSource;

	// =====================================================================
	// 실제 사용 중인 ID Generation 설정
	// =====================================================================

	/**
	 * 첨부파일 ID Generation Config (실제 사용 중)
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovFileIdGnrService() {
		EgovTableIdGnrServiceImpl egovTableIdGnrServiceImpl = new EgovTableIdGnrServiceImpl();
		egovTableIdGnrServiceImpl.setDataSource(dataSource);
		egovTableIdGnrServiceImpl.setStrategy(fileStrategy());
		egovTableIdGnrServiceImpl.setBlockSize(10);
		egovTableIdGnrServiceImpl.setTable("IDS");
		egovTableIdGnrServiceImpl.setTableName("FILE_ID");
		return egovTableIdGnrServiceImpl;
	}

	/**
	 * 첨부파일 ID Generation Strategy Config
	 * @return
	 */
	private EgovIdGnrStrategyImpl fileStrategy() {
		EgovIdGnrStrategyImpl egovIdGnrStrategyImpl = new EgovIdGnrStrategyImpl();
		egovIdGnrStrategyImpl.setPrefix("FILE_");
		egovIdGnrStrategyImpl.setCipers(15);
		egovIdGnrStrategyImpl.setFillChar('0');
		return egovIdGnrStrategyImpl;
	}

	/**
	 * 게시판마스터 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovBBSMstrIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource).setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("IDS")
			.setTableName("BBS_ID")
			.setPreFix("BBSMSTR_")
			.setCipers(12)
			.setFillChar('0')
			.build();
	}

	/**
	 * 게시글 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovNttIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource)
			.setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("COMTECOPSEQ")
			.setTableName("NTT_ID")
			.setCipers(20)
			.setFillChar('0')
			.build();
	}

	/**
	 * 일정관리 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl deptSchdulManageIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource).setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("IDS")
			.setTableName("SCHDUL_ID")
			.setPreFix("SCHDUL_")
			.setCipers(13)
			.setFillChar('0')
			.build();
	}

	// =====================================================================
	// 관리자 기능용 ID Generation 설정
	// =====================================================================

	/**
	 * 메뉴 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovMenuIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource)
			.setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("IDS")
			.setTableName("MENU_ID")
			.setPreFix("MENU_")
			.setCipers(15)
			.setFillChar('0')
			.build();
	}

	/**
	 * 사용자 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovUserIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource)
			.setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("IDS")
			.setTableName("USER_ID")
			.setPreFix("USER_")
			.setCipers(15)
			.setFillChar('0')
			.build();
	}

	/**
	 * 로그 ID Generation Config
	 * @return
	 */
	@Bean(destroyMethod = "destroy")
	public EgovTableIdGnrServiceImpl egovLogIdGnrService() {
		return new EgovIdGnrBuilder().setDataSource(dataSource)
			.setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
			.setBlockSize(10)
			.setTable("COMTECOPSEQ")
			.setTableName("LOG_ID")
			.setPreFix("LOG_")
			.setCipers(16)
			.setFillChar('0')
			.build();
	}

	// =====================================================================
	// 필요시 추가할 수 있는 ID Generation 설정
	// =====================================================================
	
	/*
	 * 추가 ID 생성기가 필요한 경우 아래 패턴을 참고하여 추가
	 * 
	 * @Bean(destroyMethod = "destroy")
	 * public EgovTableIdGnrServiceImpl egovExampleIdGnrService() {
	 *     return new EgovIdGnrBuilder().setDataSource(dataSource)
	 *         .setEgovIdGnrStrategyImpl(new EgovIdGnrStrategyImpl())
	 *         .setBlockSize(10)
	 *         .setTable("IDS")
	 *         .setTableName("EXAMPLE_ID")
	 *         .setPreFix("EX_")
	 *         .setCipers(15)
	 *         .setFillChar('0')
	 *         .build();
	 * }
	 */
}
