package CHAPTER06;

import java.util.Scanner;

class PopulationPredictor {  //기본 인구 예측 클래스
	protected int baseYear;
	protected long basePopulation;
	protected final double GROWTH_RATE;

	// 기본 생성자 (기본값 설정)
	public PopulationPredictor() {
		this.baseYear = 2020;
		this.basePopulation = 51780579;
		this.GROWTH_RATE = 0.002;
	}

	// 오버로딩된 생성자 (사용자가 직접 값 설정 가능)
	public PopulationPredictor(int baseYear, long basePopulation, double growthRate) {
		this.baseYear = baseYear;
		this.basePopulation = basePopulation;
		this.GROWTH_RATE = growthRate;
	}

	// 인구 예측 메서드 (단일 연도 예측, 오버라이딩 가능)
	public long predictPopulation(int year) {
		int yearsPassed = year - baseYear;
		return (long) (basePopulation * Math.pow(1 + GROWTH_RATE, yearsPassed));
	}

	// 메서드 오버로딩 (다중 연도 예측)
	public void predictPopulation(int startYear, int endYear) {
		System.out.println(startYear + "년부터 " + endYear + "년까지 인구 예측:");
		for (int year = startYear; year <= endYear; year++) {
			System.out.println(year + "년 예상 인구: " + predictPopulation(year) + "명");
		}
	}

	// 기준 정보 출력 (final 메서드 → 오버라이딩 불가)
	public final void displayBaseInfo() {
		System.out.println("기준 연도: " + baseYear + ", 기준 인구: " + basePopulation + "명");
	}
}

//대한민국 인구 예측 클래스 (상속 및 메소드 오버라이딩)
class KoreaPopulationPredictor extends PopulationPredictor {

	// 기본 생성자 (부모의 기본 생성자 호출)
	public KoreaPopulationPredictor() {
		super(); // 기본값 사용
	}

	// 오버로딩된 생성자 (사용자 정의 값 사용)
	public KoreaPopulationPredictor(int baseYear, long basePopulation, double growthRate) {
		super(baseYear, basePopulation, growthRate);
	}

	// 메소드 오버라이딩 (대한민국 맞춤 예측)
	@Override
	public long predictPopulation(int year) {
		System.out.println("대한민국 인구 예측을 수행 중...");
		return super.predictPopulation(year);
	}

	// 메소드 오버로딩 (다중 연도 예측)
	@Override
	public void predictPopulation(int startYear, int endYear) {
		System.out.println("대한민국 " + startYear + "년부터 " + endYear + "년까지의 인구 예측:");
		super.predictPopulation(startYear, endYear);
	}
}

public class REAL_PopulationForecast {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		// 대한민국 인구 예측기 초기화 (오버로딩된 생성자 사용 가능)
		PopulationPredictor predictor = new KoreaPopulationPredictor(2020, 51780579, 0.002);

		System.out.print("예측할 연도를 입력하세요 (단일 연도 예측): ");
		int year = scanner.nextInt();
		long predictedPopulation = predictor.predictPopulation(year);
		System.out.println(year + "년 대한민국 예상 인구: " + predictedPopulation + "명");

		System.out.print("연속된 연도의 인구를 예측하려면 시작 연도를 입력하세요: ");
		int startYear = scanner.nextInt();
		System.out.print("종료 연도를 입력하세요: ");
		int endYear = scanner.nextInt();

		predictor.predictPopulation(startYear, endYear);

		scanner.close();
	}
}