package incheon.com.config;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;

/**
 * @ClassName : EgovConfigAppDatasource.java
 * @Description : DataSource 설정
 *
 * @author : 윤주호
 * @since  : 2021. 7. 20
 * @version : 1.0
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일              수정자               수정내용
 *  -------------  ------------   ---------------------
 *   2021. 7. 20    윤주호               최초 생성
 *   2024. 12. 19   개선작업             클래스명을 파일명과 일치시킴
 * </pre>
 */
@Configuration
@PropertySources({
    @PropertySource("classpath:/application.properties"),
    @PropertySource(value = "classpath:/application-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
})
public class EgovConfigAppDataSource {

	/**
	 * 데이터소스 (기본 애플리케이션 DB)
	 */
	@Primary
	@Bean(name = "dataSource")
	@ConfigurationProperties(prefix = "globals.postgres")
	public DataSource dataSource() {
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}

	/**
	 * 외부 DB 데이터소스
	 */
	@Bean(name = "externalDataSource")
	@ConfigurationProperties(prefix = "globals.external.postgres")
	public DataSource externalDataSource() {
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}	
	
	/**
	 * 외부 DB apollo (MSSQL)
	 * - mssql.enabled=true 일 때만 생성
	 * - 로컬 환경에서는 MSSQL이 없으므로 비활성화
	 */
	@Bean(name = "mssqlDataSource")
	@ConfigurationProperties(prefix = "globals.external.mssql")
	@org.springframework.boot.autoconfigure.condition.ConditionalOnProperty(
		name = "mssql.enabled",
		havingValue = "true",
		matchIfMissing = false
	)
	public DataSource mssqlDataSource() {
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}
}
