import 'package:p_tits_pas/models/am_registration_data.dart'; import 'package:p_tits_pas/models/reprise_dossier.dart'; import 'package:p_tits_pas/models/user_registration_data.dart'; import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/utils/reprise_mapper.dart'; /// Contexte reprise après refus (token e-mail ou identify). Ticket #112. class RepriseSession { RepriseSession._(); static String? _token; static String? _role; static String? _photoUrl; static String? _photoUrlForApi; static bool get isActive => _token != null && _token!.trim().isNotEmpty; static String? get token => _token; static bool get isParent => _role == 'parent'; static bool get isAm => _role == 'assistante_maternelle'; /// URL absolue pour l'affichage. static String? get photoUrl => _photoUrl; /// Chemin relatif API (`/uploads/…`) pour PATCH sans re-upload. static String? get photoUrlForApi => _photoUrlForApi; static void start({ required String token, required RepriseDossier dossier, }) { _token = token.trim(); _role = dossier.role; final raw = dossier.photoUrl?.trim(); _photoUrlForApi = raw != null && raw.isNotEmpty ? raw : null; _photoUrl = _photoUrlForApi != null ? ApiConfig.absoluteMediaUrl(_photoUrlForApi) : null; } static void clear() { _token = null; _role = null; _photoUrl = null; _photoUrlForApi = null; } static void applyToParent(UserRegistrationData data, RepriseDossier dossier) { RepriseMapper.applyParentDossier(data, dossier); } static void applyToAm(AmRegistrationData data, RepriseDossier dossier) { final displayPhoto = _photoUrl; data.resetForReprise( firstName: dossier.prenom ?? '', lastName: dossier.nom ?? '', phone: dossier.telephone ?? '', email: dossier.email, streetAddress: dossier.adresse ?? '', postalCode: dossier.codePostal ?? '', city: dossier.ville ?? '', existingPhotoUrl: displayPhoto, consentementPhoto: dossier.consentementPhoto ?? false, dateOfBirth: RepriseMapper.parseIsoDate(dossier.dateNaissance), birthCity: dossier.lieuNaissanceVille ?? '', birthCountry: dossier.lieuNaissancePays ?? '', nir: dossier.nir ?? '', agrementNumber: dossier.numeroAgrement ?? '', agreementDate: RepriseMapper.parseIsoDate(dossier.dateAgrement), capacity: dossier.nbMaxEnfants, placesAvailable: dossier.placeDisponible, presentationText: dossier.biographie ?? '', ); } }