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<AuthScreen> createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  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<AuthCubit>().submitAuth(
      _emailController.text.trim(),
      _passwordController.text.trim(),
    );

    if (isSuccess) {
      TextInput.finishAutofillContext();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: BlocConsumer<AuthCubit, AuthState>(
        // 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
                      ),

                      // Link "Dimenticato password?" solo in Login mode
                      if (state.isLoginMode) ...[
                        const SizedBox(height: 8),
                        Align(
                          alignment: Alignment.centerRight,
                          child: TextButton(
                            onPressed: isLoading
                                ? null
                                : () => context
                                      .read<AuthCubit>()
                                      .requestPasswordReset(
                                        _emailController.text.trim(),
                                      ),
                            child: Text(
                              context.l10n.authScreenForgotPassword,
                              style: TextStyle(
                                color: context.accent,
                                fontWeight: FontWeight.bold,
                              ),
                            ),
                          ),
                        ),
                      ],

                      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<AuthCubit>().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<AuthCubit>().requestPasswordReset(
                                _emailController.text.trim(),
                              ),
                          child: Text(
                            context.l10n.authScreenForgotPassword,
                            style: TextStyle(
                              color: context.accent,
                              fontWeight: FontWeight.bold,
                            ),
                          ),
                        ),
                      ],
                    ],
                  ),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}
