import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/theme/theme.dart'; import 'package:flux/core/utils/extensions.dart'; import 'package:flux/core/widgets/flux_logo.dart'; import 'package:flux/core/widgets/flux_text_field.dart'; import 'package:flux/features/auth/bloc/auth_cubit.dart'; class AuthScreen extends StatefulWidget { const AuthScreen({super.key}); @override State createState() => _AuthScreenState(); } class _AuthScreenState extends State { final _emailController = TextEditingController(); final _passwordController = TextEditingController(); @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } void _submit() async { // Chiudiamo la tastiera per fare pulizia a schermo FocusScope.of(context).unfocus(); final isSuccess = await context.read().submitAuth( _emailController.text.trim(), _passwordController.text.trim(), ); if (isSuccess) { TextInput.finishAutofillContext(); } } @override Widget build(BuildContext context) { return Scaffold( body: BlocConsumer( // Ottimizzazione: Ridisegniamo la UI solo quando cambia lo status o la modalità listenWhen: (previous, current) => previous.errorMessage != current.errorMessage || previous.infoMessage != current.infoMessage, listener: (context, state) { // Mostriamo l'errore se c'è if (state.errorMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.errorMessage!), backgroundColor: Colors.redAccent, ), ); } // Mostriamo il messaggio info (es. Conferma Email) if (state.infoMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.infoMessage!.translatedMessage(context)), backgroundColor: Colors.blueAccent, // O context.accent ), ); } }, builder: (context, state) { final isLoading = state.status == AuthStatus.loading; return SafeArea( child: Center( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 32), child: AutofillGroup( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // --- LOGO FLUX --- const FluxLogoAuto(height: 80), const SizedBox(height: 60), // --- TITOLO DINAMICO --- Text( state.isLoginMode ? context.l10n.authScreenWelcomeBack : context.l10n.authScreenCreateAccount, style: TextStyle( color: context.primaryText, fontSize: 24, fontWeight: FontWeight.w900, letterSpacing: 1.5, ), ), const SizedBox(height: 8), Text( state.isLoginMode ? context.l10n.authScreenLoginToManageYourBusiness : context .l10n .authScreenStartTodayToDigitalizeYourStore, textAlign: TextAlign.center, style: TextStyle(color: context.secondaryText), ), const SizedBox(height: 40), // --- CAMPI INPUT --- FluxTextField( label: context.l10n.authScreenBusinessEmail, icon: Icons.email_outlined, controller: _emailController, keyboardType: TextInputType.emailAddress, autofillHints: const [ AutofillHints.email, AutofillHints.username, ], ), const SizedBox(height: 20), FluxTextField( label: 'Password', icon: Icons.lock_outline, isPassword: true, // Magia del FluxTextField! controller: _passwordController, autofillHints: const [AutofillHints.password], onSubmitted: (_) => _submit(), // Se lo supporti nel tuo widget custom ), const SizedBox(height: 40), // --- BOTTONE PRINCIPALE --- SizedBox( width: double.infinity, height: 56, child: ElevatedButton( onPressed: isLoading ? null : _submit, child: isLoading ? const SizedBox( height: 24, width: 24, child: CircularProgressIndicator( strokeWidth: 2, color: Colors.white, ), ) : Text( state.isLoginMode ? context.l10n.authScreenLogin : context.l10n.authScreenSignUp, style: const TextStyle( fontWeight: FontWeight.bold, ), ), ), ), // --- SWITCH LOGIN/SIGNUP --- const SizedBox(height: 24), TextButton( onPressed: isLoading ? null : () => context.read().toggleMode(), child: RichText( text: TextSpan( text: state.isLoginMode ? context.l10n.authScreenDontHaveAccount : context.l10n.authScreenAlreadyHaveAccount, style: TextStyle(color: context.secondaryText), children: [ TextSpan( text: state.isLoginMode ? context.l10n.authScreenSignUp : context.l10n.authScreenLogin, style: TextStyle( color: context.accent, fontWeight: FontWeight.bold, ), ), ], ), ), ), if (state.isLoginMode) ...[ const SizedBox(height: 24), TextButton( onPressed: () => context.read().requestPasswordReset( _emailController.text.trim(), ), child: Text( context.l10n.authScreenForgotPassword, style: TextStyle( color: context.accent, fontWeight: FontWeight.bold, ), ), ), ], ], ), ), ), ), ); }, ), ); } }