part of 'session_cubit.dart'; /// Definisce lo stato macroscopico della sessione enum SessionStatus { initial, unauthenticated, onboardingRequired, authenticated, } /// Definisce lo step esatto dell'onboarding (Paranoia Mode) enum OnboardingStep { none, // Non serve onboarding company, // Step 1: Manca l'azienda store, // Step 2: Manca il negozio staff, // Step 3: Manca il profilo staff ("Paziente Zero") completed, // Flusso terminato con successo } class SessionState extends Equatable { final SessionStatus status; final User? user; // Utente di Supabase Auth final CompanyModel? company; final StoreModel? currentStore; final StaffMemberModel? currentStaff; final OnboardingStep onboardingStep; final bool isMobileDevice; const SessionState({ this.status = SessionStatus.initial, this.user, this.company, this.currentStore, this.currentStaff, this.onboardingStep = OnboardingStep.none, this.isMobileDevice = false, }); /// Metodo per creare una copia dello stato modificando solo i campi necessari SessionState copyWith({ SessionStatus? status, User? user, CompanyModel? company, StoreModel? currentStore, StaffMemberModel? currentStaff, OnboardingStep? onboardingStep, bool? isMobileDevice, }) { return SessionState( status: status ?? this.status, user: user ?? this.user, company: company ?? this.company, currentStore: currentStore ?? this.currentStore, currentStaff: currentStaff ?? this.currentStaff, onboardingStep: onboardingStep ?? this.onboardingStep, isMobileDevice: isMobileDevice ?? this.isMobileDevice, ); } @override List get props => [ status, user, company, currentStore, currentStaff, onboardingStep, isMobileDevice, ]; // Helper rapidi per la UI bool get isAuthenticated => status == SessionStatus.authenticated; bool get needsOnboarding => status == SessionStatus.onboardingRequired; }