import 'package:flutter_bloc/flutter_bloc.dart'; import '../../repositories/auth_repository.dart'; import 'auth_event.dart'; import 'auth_state.dart'; class AuthBloc extends Bloc { final AuthRepository _authRepository; AuthBloc({required AuthRepository authRepository}) : _authRepository = authRepository, super(AuthInitial()) { on(_onAuthCheckRequested); on(_onSignInRequested); on(_onSignUpRequested); on(_onGoogleSignInRequested); on(_onAppleSignInRequested); on(_onSignOutRequested); on(_onPasswordResetRequested); } Future _onAuthCheckRequested( AuthCheckRequested event, Emitter emit, ) async { emit(AuthLoading()); try { final currentUser = _authRepository.currentUser; if (currentUser != null) { // Récupérer les données utilisateur depuis Firestore final user = await _authRepository.getUserFromFirestore(currentUser.uid); if (user != null) { emit(AuthAuthenticated(user: user)); } else { emit(AuthUnauthenticated()); } } else { emit(AuthUnauthenticated()); } } catch (e) { emit(AuthError(message: e.toString())); } } Future _onSignInRequested( AuthSignInRequested event, Emitter emit, ) async { emit(AuthLoading()); try { final user = await _authRepository.signInWithEmailAndPassword( email: event.email, password: event.password, ); if (user != null) { emit(AuthAuthenticated(user: user)); } else { emit(const AuthError(message: 'Email ou mot de passe incorrect')); } } catch (e) { emit(AuthError(message: e.toString())); } } Future _onSignUpRequested( AuthSignUpRequested event, Emitter emit, ) async { emit(AuthLoading()); try { final user = await _authRepository.signUpWithEmailAndPassword( email: event.email, password: event.password, nom: event.nom, prenom: event.prenom, ); if (user != null) { emit(AuthAuthenticated(user: user)); } else { emit(const AuthError(message: 'Erreur lors de l\'inscription')); } } catch (e) { emit(AuthError(message: e.toString())); } } Future _onGoogleSignInRequested( AuthGoogleSignInRequested event, Emitter emit, ) async { emit(AuthLoading()); try { final user = await _authRepository.signInWithGoogle(); if (user != null) { emit(AuthAuthenticated(user: user)); } else { emit(const AuthError(message: 'Connexion Google annulée')); } } catch (e) { emit(AuthError(message: e.toString())); } } Future _onAppleSignInRequested( AuthAppleSignInRequested event, Emitter emit, ) async { emit(AuthLoading()); try { final user = await _authRepository.signInWithApple(); if (user != null) { emit(AuthAuthenticated(user: user)); } else { emit(const AuthError(message: 'Connexion Apple annulée')); } } catch (e) { emit(AuthError(message: e.toString())); } } Future _onSignOutRequested( AuthSignOutRequested event, Emitter emit, ) async { await _authRepository.signOut(); emit(AuthUnauthenticated()); } Future _onPasswordResetRequested( AuthPasswordResetRequested event, Emitter emit, ) async { try { await _authRepository.resetPassword(event.email); emit(AuthPasswordResetSent(email: event.email)); } catch (e) { emit(AuthError(message: e.toString())); } } }