/**
 * Utility Penentuan Tahun Ajaran BPI SmartSchool
 * Baseline Sistem: Mulai dari TA 2026/2027
 * Seluruh referensi tahun ajaran sebelum 2026/2027 dieliminasi.
 * Opsi bertambah dinamis ke depan: 2026/2027, 2027/2028, 2028/2029, 2029/2030, dst.
 */

export const BASELINE_ACADEMIC_YEAR = "2026/2027";
export const BASELINE_START_YEAR = 2026;

export function getCurrentAcademicYear(referenceDate: Date = new Date()): string {
  const currentYear = referenceDate.getFullYear();
  const currentMonth = referenceDate.getMonth() + 1; // 1 = Januari, ..., 7 = Juli, ..., 12 = Desember

  let startYear = currentMonth >= 7 ? currentYear : currentYear - 1;
  // Pastikan tidak pernah lebih rendah dari BASELINE 2026
  if (startYear < BASELINE_START_YEAR) {
    startYear = BASELINE_START_YEAR;
  }
  return `${startYear}/${startYear + 1}`;
}

/**
 * Mendapatkan rentang daftar tahun ajaran mulai dari baseline 2026/2027 dan bertambah dinamis ke depan
 * Contoh: [2026/2027, 2027/2028, 2028/2029, 2029/2030, 2030/2031]
 */
export function getAcademicYearOptions(forwardCount: number = 4, referenceDate: Date = new Date()): string[] {
  const activeYear = getCurrentAcademicYear(referenceDate);
  const activeStart = parseInt(activeYear.split("/")[0], 10) || BASELINE_START_YEAR;

  const maxYear = Math.max(activeStart + forwardCount, BASELINE_START_YEAR + 4);
  const years: string[] = [];

  for (let y = BASELINE_START_YEAR; y <= maxYear; y++) {
    years.push(`${y}/${y + 1}`);
  }
  return years;
}

/**
 * Mendapatkan daftar tahun ajaran mundur hingga batas BASELINE 2026/2027
 */
export function getPastAcademicYears(count: number = 5, referenceDate: Date = new Date()): string[] {
  const activeYear = getCurrentAcademicYear(referenceDate);
  const activeStart = parseInt(activeYear.split("/")[0], 10) || BASELINE_START_YEAR;
  const years: string[] = [];

  for (let y = activeStart; y >= BASELINE_START_YEAR; y--) {
    years.push(`${y}/${y + 1}`);
  }
  if (!years.includes(BASELINE_ACADEMIC_YEAR)) {
    years.push(BASELINE_ACADEMIC_YEAR);
  }
  return years;
}

/**
 * Menggabungkan daftar tahun ajaran aktif, dinamis ke depan, dan yang ada di database,
 * dengan filter ketat: HANYA tahun ajaran >= 2026/2027
 */
export function mergeAcademicYearOptions(
  dbYears: string[] = [],
  forwardCount: number = 4,
  referenceDate: Date = new Date()
): string[] {
  const standardOptions = getAcademicYearOptions(forwardCount, referenceDate);
  const validDbYears = dbYears.filter((y) => {
    if (!y) return false;
    const start = parseInt(y.split("/")[0], 10);
    return !isNaN(start) && start >= BASELINE_START_YEAR;
  });

  const set = new Set<string>([...standardOptions, ...validDbYears]);
  return Array.from(set).sort((a, b) => {
    const aStart = parseInt(a.split("/")[0], 10) || 0;
    const bStart = parseInt(b.split("/")[0], 10) || 0;
    return aStart - bStart; // Urutan menaik: 2026/2027, 2027/2028, 2028/2029, 2029/2030, dst.
  });
}
