import 'package:flutter/material.dart'; import 'package:farolero/l10n/generated/app_localizations.dart'; import 'package:provider/provider.dart'; import '../modelos/inicio_partida_multijugador.dart'; import '../modelos/palabra.dart'; import '../modelos/snapshot_partida_online.dart'; import '../servicios/servicio_nearby.dart'; import '../tema/tema_app.dart'; import 'pantalla_notas_online.dart'; import 'pantalla_principal.dart'; import 'pantalla_revision_palabra.dart'; class PantallaFinPartidaOnline extends StatelessWidget { final SnapshotPartidaOnline snapshot; final List jugadoresControlados; final String? pistaCategoria; const PantallaFinPartidaOnline({ super.key, required this.snapshot, required this.jugadoresControlados, this.pistaCategoria, }); @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; final ganaronJugadores = snapshot.ganador == 'jugadores'; return Scaffold( appBar: AppBar( title: Text(l10n.gameOver), automaticallyImplyLeading: false, actions: [ IconButton( tooltip: l10n.seeYourWord, icon: const Icon(Icons.visibility), onPressed: jugadoresControlados.isEmpty ? null : () => mostrarRevisionPalabraOnline( context: context, jugadoresControlados: jugadoresControlados, pistaCategoria: pistaCategoria, ), ), IconButton( tooltip: l10n.notesTitle, icon: const Icon(Icons.edit_note), onPressed: snapshot.roomId == null || jugadoresControlados.isEmpty ? null : () => Navigator.push( context, MaterialPageRoute( builder: (_) => PantallaNotasOnline( partidaId: snapshot.roomId!, jugadores: snapshot.jugadores, autoresControlados: jugadoresControlados, ), ), ), ), ], ), body: SingleChildScrollView( padding: const EdgeInsets.all(24), child: Column( children: [ Container( width: double.infinity, padding: const EdgeInsets.all(32), decoration: BoxDecoration( gradient: LinearGradient( colors: ganaronJugadores ? [ TemaApp.colorVerde.withValues(alpha: 0.3), TemaApp.colorVerde.withValues(alpha: 0.1), ] : [ TemaApp.colorAcento.withValues(alpha: 0.3), TemaApp.colorAcento.withValues(alpha: 0.1), ], begin: Alignment.topCenter, end: Alignment.bottomCenter, ), borderRadius: BorderRadius.circular(20), border: Border.all( color: ganaronJugadores ? TemaApp.colorVerde : TemaApp.colorAcento, ), ), child: Column( children: [ Text( ganaronJugadores ? '🎉' : '🎭', style: const TextStyle(fontSize: 64), ), const SizedBox(height: 16), Text( ganaronJugadores ? l10n.playersWin : l10n.impostorsWin, style: Theme.of(context).textTheme.headlineMedium?.copyWith( color: ganaronJugadores ? TemaApp.colorVerde : TemaApp.colorAcento, ), textAlign: TextAlign.center, ), ], ), ), const SizedBox(height: 24), Card( child: Padding( padding: const EdgeInsets.all(20), child: Column( children: [ Text( l10n.theSecretWordWas, style: Theme.of(context).textTheme.titleMedium, ), const SizedBox(height: 8), Text( snapshot.palabraSecreta ?? '?', style: Theme.of(context).textTheme.headlineLarge?.copyWith( color: TemaApp.colorNaranja, fontSize: 32, ), ), const SizedBox(height: 4), Text( l10n.categoryLabel( BancoPalabras.nombreBonitoCategoria( snapshot.categoria, l10n, ), ), style: Theme.of(context).textTheme.bodyMedium, ), ], ), ), ), const SizedBox(height: 16), Card( child: Padding( padding: const EdgeInsets.all(20), child: Column( children: [ Text( snapshot.impostores.length == 1 ? l10n.theImpostorWas : l10n.theImpostorsWere, style: Theme.of(context).textTheme.titleMedium, ), const SizedBox(height: 8), ...snapshot.impostores.map( (nombre) => Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: Text( '🎭 $nombre', style: Theme.of(context).textTheme.titleLarge?.copyWith( color: TemaApp.colorAcento, ), ), ), ), ], ), ), ), const SizedBox(height: 16), if (snapshot.historialVotaciones.isNotEmpty) Card( child: Padding( padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( l10n.votingHistory, style: Theme.of(context).textTheme.titleMedium, ), const SizedBox(height: 12), ...snapshot.historialVotaciones.asMap().entries.map( (entrada) { final ronda = entrada.key + 1; final resultado = entrada.value; return Padding( padding: const EdgeInsets.only(bottom: 12), child: Text( l10n.roundElimination( ronda, resultado.eliminadoNombre, ), style: TextStyle( fontWeight: FontWeight.bold, color: resultado.eraImpostor ? TemaApp.colorVerde : TemaApp.colorAcento, ), ), ); }, ), ], ), ), ), const SizedBox(height: 24), SizedBox( width: double.infinity, height: 56, child: OutlinedButton.icon( onPressed: () async { await context.read().desconectar(); if (!context.mounted) return; Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (_) => const PantallaPrincipal(), ), (route) => false, ); }, icon: const Icon(Icons.home), label: Text(l10n.mainMenu), ), ), ], ), ), ); } }