import { getApiBaseUrl } from '$lib/api';
import { authenticatedFetch } from '$lib/auth';
import type { StudentHomework, StudentHomeworkDetail } from './studentHomework';

export interface ChildHomework {
	childId: string;
	firstName: string;
	lastName: string;
	homework: StudentHomework[];
}

/**
 * Récupère les devoirs de tous les enfants du parent connecté.
 */
export async function fetchChildrenHomework(subjectId?: string): Promise<ChildHomework[]> {
	const apiUrl = getApiBaseUrl();
	const params = subjectId ? `?subjectId=${encodeURIComponent(subjectId)}` : '';
	const response = await authenticatedFetch(`${apiUrl}/me/children/homework${params}`);

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

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

/**
 * Récupère les devoirs d'un enfant spécifique.
 */
export async function fetchChildHomework(childId: string, subjectId?: string): Promise<ChildHomework> {
	const apiUrl = getApiBaseUrl();
	const params = subjectId ? `?subjectId=${encodeURIComponent(subjectId)}` : '';
	const response = await authenticatedFetch(`${apiUrl}/me/children/${childId}/homework${params}`);

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

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

/**
 * Récupère le détail d'un devoir via l'endpoint parent.
 */
/**
 * Retourne l'URL de téléchargement d'une pièce jointe (endpoint parent).
 */
export function getParentAttachmentUrl(homeworkId: string, attachmentId: string): string {
	const apiUrl = getApiBaseUrl();
	return `${apiUrl}/me/children/homework/${homeworkId}/attachments/${attachmentId}`;
}

export async function fetchParentHomeworkDetail(homeworkId: string): Promise<StudentHomeworkDetail> {
	const apiUrl = getApiBaseUrl();
	const response = await authenticatedFetch(`${apiUrl}/me/children/homework/${homeworkId}`);

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

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