import { getApiBaseUrl } from '$lib/api';
import { authenticatedFetch } from '$lib/auth';

export interface ScheduleSlot {
	slotId: string;
	date: string;
	dayOfWeek: number;
	startTime: string;
	endTime: string;
	subjectId: string;
	subjectName: string;
	subjectColor: string | null;
	teacherId: string;
	teacherName: string;
	room: string | null;
	isModified: boolean;
	exceptionId: string | null;
}

/**
 * Récupère l'EDT du jour pour l'élève connecté.
 */
export async function fetchDaySchedule(date: string): Promise<ScheduleSlot[]> {
	const apiUrl = getApiBaseUrl();
	const response = await authenticatedFetch(`${apiUrl}/me/schedule/day/${date}`);

	if (!response.ok) {
		throw new Error(`Erreur lors du chargement de l'EDT (${response.status})`);
	}

	const json = await response.json();
	return json.data ?? [];
}

/**
 * Récupère l'EDT de la semaine pour l'élève connecté.
 */
export async function fetchWeekSchedule(date: string): Promise<ScheduleSlot[]> {
	const apiUrl = getApiBaseUrl();
	const response = await authenticatedFetch(`${apiUrl}/me/schedule/week/${date}`);

	if (!response.ok) {
		throw new Error(`Erreur lors du chargement de l'EDT (${response.status})`);
	}

	const json = await response.json();
	return json.data ?? [];
}

/**
 * Récupère le prochain cours pour l'élève connecté.
 */
export async function fetchNextClass(): Promise<ScheduleSlot | null> {
	const apiUrl = getApiBaseUrl();
	const response = await authenticatedFetch(`${apiUrl}/me/schedule/next-class`);

	if (!response.ok) {
		throw new Error(`Erreur lors du chargement du prochain cours (${response.status})`);
	}

	const json = await response.json();
	return json.data ?? null;
}
