import 'package:equatable/equatable.dart'; import '../../domain/entities/auth_user.dart'; /// Estados posibles del [AuthBloc]. /// Usando sealed class para exhaustividad en switch expressions (Dart 3+). sealed class AuthState extends Equatable { const AuthState(); @override List get props => []; } /// Estado inicial antes de cualquier verificación. final class AuthInitial extends AuthState { const AuthInitial(); } /// Verificando si existe sesión almacenada (al inicio de la app). final class AuthCheckingSession extends AuthState { const AuthCheckingSession(); } /// Proceso de login o logout en curso. final class AuthLoading extends AuthState { const AuthLoading(); } /// Usuario autenticado exitosamente. Contiene el usuario y su token JWT. final class AuthAuthenticated extends AuthState { final AuthUser user; const AuthAuthenticated({required this.user}); /// Expone el token para su uso en headers HTTP futuros. String get bearerToken => 'Bearer ${user.token}'; @override List get props => [user]; } /// No autenticado (estado limpio, sin sesión). final class AuthUnauthenticated extends AuthState { const AuthUnauthenticated(); } /// Error durante la autenticación. final class AuthFailure extends AuthState { final String message; final String? errorCode; const AuthFailure({required this.message, this.errorCode}); @override List get props => [message, errorCode]; }