import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';

import '../../../core/api/api_client.dart';
import '../../boloes/data/convite_pendente.dart';
import 'sessao_controller.dart';
import '../../../core/tema/marca.dart';

class LoginPage extends ConsumerStatefulWidget {
  const LoginPage({super.key});

  @override
  ConsumerState<LoginPage> createState() => _LoginPageState();
}

class _LoginPageState extends ConsumerState<LoginPage> {
  final _form = GlobalKey<FormState>();
  final _email = TextEditingController();
  final _senha = TextEditingController();

  bool _enviando = false;
  String? _erro;

  @override
  void dispose() {
    _email.dispose();
    _senha.dispose();
    super.dispose();
  }

  Future<void> _entrar() async {
    setState(() => _erro = null);
    if (!_form.currentState!.validate()) return;

    setState(() => _enviando = true);
    try {
      await ref
          .read(sessaoProvider.notifier)
          .entrar(email: _email.text.trim(), senha: _senha.text);
    } on ApiError catch (e) {
      if (mounted) setState(() => _erro = e.mensagem);
    } finally {
      if (mounted) setState(() => _enviando = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Entrar')),
      body: SafeArea(
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(24),
          child: Form(
            key: _form,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                const Padding(
                  padding: EdgeInsets.only(top: 8, bottom: 28),
                  child: MarcaRaro(produto: 'bolão'),
                ),
                // Mesmo aviso do cadastro: quem chegou por convite precisa
                // saber que ele continua valendo depois do login.
                if (ref.watch(convitePendenteProvider) != null) ...[
                  Container(
                    padding: const EdgeInsets.all(12),
                    decoration: BoxDecoration(
                      color: Theme.of(context).colorScheme.secondaryContainer,
                      borderRadius: BorderRadius.circular(8),
                    ),
                    child: const Text(
                      'Você foi convidado para um bolão. Entre na sua conta e a '
                      'gente te coloca lá dentro na sequência.',
                      style: TextStyle(fontSize: 13),
                    ),
                  ),
                  const SizedBox(height: 20),
                ],
                TextFormField(
                  controller: _email,
                  keyboardType: TextInputType.emailAddress,
                  autocorrect: false,
                  textInputAction: TextInputAction.next,
                  decoration: const InputDecoration(labelText: 'E-mail'),
                  validator: (v) => (v == null || v.trim().isEmpty)
                      ? 'informe seu e-mail'
                      : null,
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _senha,
                  obscureText: true,
                  decoration: const InputDecoration(labelText: 'Senha'),
                  validator: (v) =>
                      (v == null || v.isEmpty) ? 'informe sua senha' : null,
                  onFieldSubmitted: (_) => _entrar(),
                ),
                if (_erro != null) ...[
                  const SizedBox(height: 16),
                  Text(
                    _erro!,
                    style: TextStyle(
                      color: Theme.of(context).colorScheme.error,
                    ),
                  ),
                ],
                const SizedBox(height: 24),
                FilledButton(
                  onPressed: _enviando ? null : _entrar,
                  child: _enviando
                      ? const SizedBox(
                          height: 20,
                          width: 20,
                          child: CircularProgressIndicator(strokeWidth: 2),
                        )
                      : const Text('Entrar'),
                ),
                const SizedBox(height: 12),
                // Sem link de "esqueci minha senha": recuperação não existe
                // nesta versão, e oferecer seria prometer o que não há.
                TextButton(
                  onPressed: _enviando ? null : () => context.go('/cadastro'),
                  child: const Text('Não tenho conta — criar agora'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
