import 'package:flutter/material.dart';
import 'package:farolero/l10n/generated/app_localizations.dart';
import 'package:provider/provider.dart';
import '../estado/estado_juego.dart';
import '../tema/componentes_farolero.dart';
import '../tema/tema_app.dart';
import 'pantalla_debate.dart';
import 'pantalla_fin_partida.dart';

class PantallaAdivinanza extends StatefulWidget {
  const PantallaAdivinanza({super.key});

  @override
  State<PantallaAdivinanza> createState() => _PantallaAdivinanzaState();
}

class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
  final _controlador = TextEditingController();
  bool? _acierto;

  @override
  void dispose() {
    _controlador.dispose();
    super.dispose();
  }

  void _intentarAdivinar() {
    final estado = context.read<EstadoJuego>();
    final resultado = estado.intentarAdivinar(_controlador.text);
    setState(() => _acierto = resultado);
  }

  void _continuarTrasNoAdivinar(EstadoJuego estado) {
    final fin = estado.comprobarFinPartida();
    if (fin) {
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (_) => const PantallaFinPartida()),
      );
    } else {
      estado.siguienteRonda();
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (_) => const PantallaDebate()),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    final l10n = AppLocalizations.of(context)!;
    final estado = context.watch<EstadoJuego>();
    final partida = estado.partida;
    if (partida == null) return const SizedBox.shrink();

    return Scaffold(
      appBar: AppBar(
        title: Text(l10n.impostorGuessTitle),
        automaticallyImplyLeading: false,
      ),
      body: FondoFarolero(
        intenso: true,
        child: SafeArea(
          child: Center(
            child: SingleChildScrollView(
              padding: const EdgeInsets.all(24),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const ArteGameplayFarolero.fase(height: 132),
                  const SizedBox(height: 12),
                  TarjetaFaseFarolero(
                    icono: Icons.theater_comedy,
                    titulo: l10n.impostorCanGuess,
                    subtitulo: l10n.ifCorrectImpostorsWin,
                    color: TemaApp.colorAcento,
                    child: _buildContenido(context, l10n, estado, partida.palabraSecreta),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

  Widget _buildContenido(
    BuildContext context,
    AppLocalizations l10n,
    EstadoJuego estado,
    String palabraSecreta,
  ) {
    if (_acierto == null) {
      return Column(
        children: [
          TextField(
            controller: _controlador,
            decoration: InputDecoration(
              hintText: l10n.guessWordHint,
              prefixIcon: const Icon(Icons.search),
            ),
            textCapitalization: TextCapitalization.sentences,
            textAlign: TextAlign.center,
            style: const TextStyle(fontSize: 20),
            onChanged: (value) => setState(() {}),
            onSubmitted: (value) => _intentarAdivinar(),
          ),
          const SizedBox(height: 24),
          Row(
            children: [
              Expanded(
                child: BotonFarolero.oscuro(
                  texto: l10n.dontGuess,
                  icono: Icons.skip_next,
                  onPressed: () => _continuarTrasNoAdivinar(estado),
                ),
              ),
              const SizedBox(width: 12),
              Expanded(
                flex: 2,
                child: BotonFarolero(
                  texto: l10n.guess,
                  icono: Icons.send,
                  assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
                  onPressed: _controlador.text.trim().isNotEmpty ? _intentarAdivinar : null,
                ),
              ),
            ],
          ),
        ],
      );
    }

    final acierto = _acierto == true;
    final color = acierto ? TemaApp.colorAcento : TemaApp.colorVerde;
    return Column(
      children: [
        PanelFarolero(
          padding: const EdgeInsets.all(24),
          borderColor: color,
          color: color.withValues(alpha: 0.18),
          child: Column(
            children: [
              Icon(
                acierto ? Icons.celebration : Icons.cancel,
                color: color,
                size: 52,
              ),
              const SizedBox(height: 12),
              Text(
                acierto ? l10n.correctGuess : l10n.wrongGuess,
                textAlign: TextAlign.center,
                style: Theme.of(context).textTheme.headlineMedium?.copyWith(color: color),
              ),
              const SizedBox(height: 8),
              Text(
                acierto ? l10n.theWordWas(palabraSecreta) : l10n.gameContinues,
                textAlign: TextAlign.center,
                style: Theme.of(context).textTheme.titleLarge,
              ),
              if (acierto) ...[
                const SizedBox(height: 8),
                Text(
                  l10n.impostorsWin,
                  textAlign: TextAlign.center,
                  style: Theme.of(context).textTheme.bodyLarge?.copyWith(color: TemaApp.colorNaranja),
                ),
              ],
            ],
          ),
        ),
        const SizedBox(height: 24),
        BotonFarolero(
          texto: acierto ? l10n.seeEndResult : l10n.nextRound,
          icono: acierto ? Icons.emoji_events : Icons.skip_next,
          assetIconPath: acierto ? 'assets/ui/generated/actions/action_result_trophy.webp' : null,
          onPressed: acierto
              ? () {
                  Navigator.pushReplacement(
                    context,
                    MaterialPageRoute(builder: (_) => const PantallaFinPartida()),
                  );
                }
              : () => _continuarTrasNoAdivinar(estado),
        ),
      ],
    );
  }
}
