import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/blocs/session/session_cubit.dart'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; part 'auth_state.dart'; class AuthCubit extends Cubit { final _supabase = GetIt.instance(); AuthCubit() : super(const AuthState()); void toggleMode() { emit(state.copyWith(isLoginMode: !state.isLoginMode)); } Future submitAuth(String email, String password) async { // Partiamo puliti: via vecchi messaggi ed errori emit(state.copyWith(status: AuthStatus.loading)); try { if (state.isLoginMode) { // --- LOGICA LOGIN --- await _supabase.auth.signInWithPassword( email: email, password: password, ); // NESSUN EMIT DI SUCCESS! // Supabase lancerà l'evento 'signedIn', il SessionCubit lo catturerà // e il GoRouter ci cambierà pagina. Noi stiamo a guardare il caricamento. } else { // --- LOGICA SIGNUP --- final AuthResponse res = await _supabase.auth.signUp( email: email, password: password, ); if (res.session == null) { // Caso: Conferma Email attivata su Supabase emit( state.copyWith( status: AuthStatus.initial, infoMessage: "Controlla la tua email per confermare l'account!", ), ); } else { // Caso: Autologin post-registrazione (Conferma email disattivata) // 1. Fermiamo il frullino! emit(state.copyWith(status: AuthStatus.initial)); // 2. Svegliamo il SessionCubit! GetIt.I().initializeSession(); } // Se non è null, ha fatto il login automatico. Stessa cosa di sopra, ci pensa il SessionCubit. } } on AuthException catch (e) { emit(state.copyWith(status: AuthStatus.failure, errorMessage: e.message)); } catch (e) { emit( state.copyWith( status: AuthStatus.failure, errorMessage: "Errore imprevisto: $e", ), ); } } Future requestLogout() async { await _supabase.auth.signOut(); emit(state.copyWith(status: AuthStatus.initial)); } }