/** Formatage des dates et des libellés, en français. */

const MOIS = [
	'janvier', 'février', 'mars', 'avril', 'mai', 'juin',
	'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'
];

/** « 2026-06-12 » → « 12 juin 2026 ». */
export function dateLongue(iso: string | null | undefined): string {
	if (!iso) return '';
	const [a, m, j] = iso.slice(0, 10).split('-').map(Number);
	if (!a || !m || !j) return iso;
	return `${j === 1 ? '1ᵉʳ' : j} ${MOIS[m - 1]} ${a}`;
}

/** « 2026-06-12 » → « 12 juin ». */
export function dateCourte(iso: string | null | undefined): string {
	if (!iso) return '';
	const [, m, j] = iso.slice(0, 10).split('-').map(Number);
	if (!m || !j) return iso;
	return `${j === 1 ? '1ᵉʳ' : j} ${MOIS[m - 1]}`;
}

export function mois(iso: string): string {
	const [a, m] = iso.slice(0, 10).split('-').map(Number);
	return `${MOIS[m - 1]} ${a}`;
}

/** Nombre de jours entre deux dates ISO, positif dans le futur. */
export function joursRestants(iso: string, depuis = '2026-07-25'): number {
	const cible = new Date(iso.slice(0, 10)).getTime();
	const base = new Date(depuis).getTime();
	return Math.round((cible - base) / 86_400_000);
}

export function pluriel(n: number, singulier: string, plurielMot?: string): string {
	return n > 1 ? (plurielMot ?? `${singulier}s`) : singulier;
}

/** Tronque sur une frontière de mot, sans couper au milieu. */
export function extrait(texte: string | null | undefined, taille = 180): string {
	if (!texte) return '';
	if (texte.length <= taille) return texte;
	const coupe = texte.slice(0, taille);
	const espace = coupe.lastIndexOf(' ');
	return `${coupe.slice(0, espace > 0 ? espace : taille)}…`;
}
