/**
 * Master Data & Konfigurasi Jam Pelajaran SMA BPI 1 Bandung
 * Mendukung Jam KBM (1 s/d 13) dan Waktu Istirahat (Non-KBM).
 * Data dapat diambil/disimpan dinamis ke database SQLite (master_jam_pelajaran)
 * dengan fallback default resmi ini.
 */

export interface MasterJamPelajaranItem {
  id: number;
  urutan: number;
  label: string; // "Jam Ke-1", "Istirahat 1", dll.
  jam_ke: number | null; // null jika waktu istirahat/non-kbm
  jam_mulai: string; // "06.45"
  jam_selesai: string; // "07.30"
  tipe: "kbm" | "istirahat";
  keterangan?: string;
}

export const DEFAULT_MASTER_JAM_PELAJARAN: MasterJamPelajaranItem[] = [
  {
    id: 1,
    urutan: 1,
    label: "Jam Ke-1",
    jam_ke: 1,
    jam_mulai: "06.45",
    jam_selesai: "07.30",
    tipe: "kbm",
  },
  {
    id: 2,
    urutan: 2,
    label: "Jam Ke-2",
    jam_ke: 2,
    jam_mulai: "07.30",
    jam_selesai: "08.05",
    tipe: "kbm",
  },
  {
    id: 3,
    urutan: 3,
    label: "Jam Ke-3",
    jam_ke: 3,
    jam_mulai: "08.05",
    jam_selesai: "08.40",
    tipe: "kbm",
  },
  {
    id: 4,
    urutan: 4,
    label: "Jam Ke-4",
    jam_ke: 4,
    jam_mulai: "08.40",
    jam_selesai: "09.15",
    tipe: "kbm",
  },
  {
    id: 5,
    urutan: 5,
    label: "Istirahat 1",
    jam_ke: null,
    jam_mulai: "09.15",
    jam_selesai: "09.40",
    tipe: "istirahat",
    keterangan: "Istirahat Pagi / Shalat Dhuha",
  },
  {
    id: 6,
    urutan: 6,
    label: "Jam Ke-5",
    jam_ke: 5,
    jam_mulai: "09.40",
    jam_selesai: "10.15",
    tipe: "kbm",
  },
  {
    id: 7,
    urutan: 7,
    label: "Jam Ke-6",
    jam_ke: 6,
    jam_mulai: "10.15",
    jam_selesai: "10.50",
    tipe: "kbm",
  },
  {
    id: 8,
    urutan: 8,
    label: "Jam Ke-7",
    jam_ke: 7,
    jam_mulai: "10.50",
    jam_selesai: "11.25",
    tipe: "kbm",
  },
  {
    id: 9,
    urutan: 9,
    label: "Jam Ke-8",
    jam_ke: 8,
    jam_mulai: "11.25",
    jam_selesai: "12.00",
    tipe: "kbm",
  },
  {
    id: 10,
    urutan: 10,
    label: "Istirahat 2",
    jam_ke: null,
    jam_mulai: "12.00",
    jam_selesai: "12.30",
    tipe: "istirahat",
    keterangan: "Ishoma / Shalat Dzuhur Berjamaah",
  },
  {
    id: 11,
    urutan: 11,
    label: "Jam Ke-9",
    jam_ke: 9,
    jam_mulai: "12.30",
    jam_selesai: "13.05",
    tipe: "kbm",
  },
  {
    id: 12,
    urutan: 12,
    label: "Jam Ke-10",
    jam_ke: 10,
    jam_mulai: "13.05",
    jam_selesai: "13.40",
    tipe: "kbm",
  },
  {
    id: 13,
    urutan: 13,
    label: "Jam Ke-11",
    jam_ke: 11,
    jam_mulai: "13.40",
    jam_selesai: "14.15",
    tipe: "kbm",
  },
  {
    id: 14,
    urutan: 14,
    label: "Jam Ke-12",
    jam_ke: 12,
    jam_mulai: "14.15",
    jam_selesai: "14.50",
    tipe: "kbm",
  },
  {
    id: 15,
    urutan: 15,
    label: "Jam Ke-13",
    jam_ke: 13,
    jam_mulai: "14.50",
    jam_selesai: "15.20",
    tipe: "kbm",
  },
];

/**
 * Helper untuk menghitung rentang waktu KBM otomatis berdasarkan
 * Jam Ke- (Awal) dan Jam Ke- (Akhir) memperhitungkan jeda istirahat secara cerdas.
 */
export function calculateKbmTimeRange(
  periodStart: number,
  periodEnd: number,
  masterSchedule: MasterJamPelajaranItem[] = DEFAULT_MASTER_JAM_PELAJARAN
): { timeSlot: string; start: string; end: string; crossesBreak: boolean; breakNames: string[] } {
  const pStart = Math.min(periodStart, periodEnd);
  const pEnd = Math.max(periodStart, periodEnd);

  // Ambil item KBM start dan KBM end
  const startItem = masterSchedule.find((item) => item.tipe === "kbm" && item.jam_ke === pStart);
  const endItem = masterSchedule.find((item) => item.tipe === "kbm" && item.jam_ke === pEnd);

  const startTime = startItem?.jam_mulai || "06.45";
  const endTime = endItem?.jam_selesai || startItem?.jam_selesai || "07.30";

  // Periksa apakah rentang jam melewati istirahat
  const breakNames: string[] = [];
  if (startItem && endItem) {
    const minOrder = Math.min(startItem.urutan, endItem.urutan);
    const maxOrder = Math.max(startItem.urutan, endItem.urutan);

    masterSchedule.forEach((item) => {
      if (item.tipe === "istirahat" && item.urutan > minOrder && item.urutan < maxOrder) {
        breakNames.push(`${item.label} (${item.jam_mulai} - ${item.jam_selesai})`);
      }
    });
  }

  return {
    timeSlot: `${startTime} - ${endTime}`,
    start: startTime,
    end: endTime,
    crossesBreak: breakNames.length > 0,
    breakNames,
  };
}
