import AsyncStorage from '@react-native-async-storage/async-storage'; import { Classe } from './models'; const STORAGE_KEY = '@tirage_classes:classes'; /** Charge toutes les classes depuis le stockage local (offline), sous forme d'instances Classe. */ export async function chargerClasses() { const brut = await AsyncStorage.getItem(STORAGE_KEY); if (!brut) return []; try { const donnees = JSON.parse(brut); return donnees.map((c) => Classe.fromJSON(c)); } catch (e) { console.warn('Données locales corrompues, réinitialisation.', e); return []; } } async function sauvegarderClasses(classes) { await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(classes.map((c) => c.toJSON()))); } export async function obtenirClasse(id) { const classes = await chargerClasses(); return classes.find((c) => c.id === id) || null; } export async function creerClasse({ nom, nombreEleves, ponderationMax }) { const classes = await chargerClasses(); const nouvelle = new Classe({ nom: nom.trim(), nombreEleves, ponderationMax }); classes.push(nouvelle); await sauvegarderClasses(classes); return nouvelle; } export async function modifierClasse(id, { nom, nombreEleves, ponderationMax }) { const classes = await chargerClasses(); const classe = classes.find((c) => c.id === id); if (!classe) throw new Error('Classe introuvable'); classe.nom = nom.trim(); classe.nombreEleves = Number(nombreEleves); classe.ponderationMax = Number(ponderationMax) || 2; await sauvegarderClasses(classes); return classe; } export async function supprimerClasse(id) { const classes = await chargerClasses(); await sauvegarderClasses(classes.filter((c) => c.id !== id)); } /** Effectue un tirage pondéré sur la classe et persiste le résultat. */ export async function effectuerTirage(classeId) { const classes = await chargerClasses(); const classe = classes.find((c) => c.id === classeId); if (!classe) throw new Error('Classe introuvable'); classe.tirer(); await sauvegarderClasses(classes); return classe; } /** Annule le dernier tirage et en effectue immédiatement un nouveau (bouton "Re-tirer"). */ export async function reTirer(classeId) { const classes = await chargerClasses(); const classe = classes.find((c) => c.id === classeId); if (!classe) throw new Error('Classe introuvable'); classe.reTirer(); await sauvegarderClasses(classes); return classe; }