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 createState() => _PantallaAdivinanzaState(); } class _PantallaAdivinanzaState extends State { final _controlador = TextEditingController(); bool? _acierto; @override void dispose() { _controlador.dispose(); super.dispose(); } void _intentarAdivinar() { final estado = context.read(); 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(); 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, 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, onPressed: acierto ? () { Navigator.pushReplacement( context, MaterialPageRoute(builder: (_) => const PantallaFinPartida()), ); } : () => _continuarTrasNoAdivinar(estado), ), ], ); } }