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

import '../../../core/api/api_client.dart';
import '../data/participantes_repository.dart';
import 'participantes_page.dart';
import 'prazo.dart';

/// Regras e próximo prazo, mostrados **logo depois de entrar** (CC-5 FE-4).
///
/// Quem entra sem saber a regra palpita achando que placar exato vale o mesmo
/// que acertar o vencedor — e descobre a diferença no extrato, quando já não dá
/// para mudar nada. O próximo prazo vem no fuso local pelo mesmo motivo: é a
/// informação que decide se ele palpita agora ou depois.
class BoasVindasAoBolao extends ConsumerStatefulWidget {
  const BoasVindasAoBolao({required this.poolId, super.key});

  final String poolId;

  @override
  ConsumerState<BoasVindasAoBolao> createState() => _BoasVindasAoBolaoState();
}

class _BoasVindasAoBolaoState extends ConsumerState<BoasVindasAoBolao> {
  Regras? _regras;
  bool _carregando = true;

  @override
  void initState() {
    super.initState();
    _carregar();
  }

  Future<void> _carregar() async {
    try {
      final r = await ref
          .read(participantesRepositoryProvider)
          .regras(widget.poolId);
      if (mounted) setState(() => _regras = r);
    } on ApiError catch (_) {
      // Falhar aqui não pode travar a entrada: o participante já está no bolão,
      // e as regras continuam alcançáveis pelo menu.
    } finally {
      if (mounted) setState(() => _carregando = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    final r = _regras;

    // Rolável: a folha é limitada pela altura disponível, e o conteúdo cresce
    // com a escala de fonte do sistema. Sem rolagem, quem usa fonte grande — ou
    // um aparelho baixo — perde o botão de fechar atrás da listra de overflow.
    return SingleChildScrollView(
      padding: const EdgeInsets.fromLTRB(24, 0, 24, 32),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            'Você está no bolão',
            style: Theme.of(context).textTheme.titleLarge,
          ),
          const SizedBox(height: 16),
          if (_carregando)
            const Center(child: CircularProgressIndicator())
          else if (r == null)
            const Text(
              'Não foi possível carregar as regras agora. Elas ficam no menu do '
              'bolão, a qualquer momento.',
            )
          else ...[
            Text('Como pontua', style: Theme.of(context).textTheme.labelLarge),
            const SizedBox(height: 4),
            Text('${r.pontosExato} pontos — placar exato'),
            Text('${r.pontosVencedorSaldo} pontos — vencedor e saldo de gols'),
            Text('${r.pontosVencedor} pontos — só o vencedor'),
            const SizedBox(height: 4),
            Text(
              'Empate no total é decidido por '
              '${descreverOrdemDesempate(r.ordemDesempate)}.',
              style: const TextStyle(fontSize: 12),
            ),
            const SizedBox(height: 16),
            Text('Prazo', style: Theme.of(context).textTheme.labelLarge),
            const SizedBox(height: 4),
            if (r.proximoPrazo != null)
              Text(
                'O próximo jogo fecha em '
                '${formatarHorarioLocal(r.proximoPrazo!)} '
                '(${formatarRestante(r.proximoPrazo!.difference(DateTime.now()))}).',
              )
            else
              const Text('Nenhum jogo com prazo aberto agora.'),
            const SizedBox(height: 4),
            const Text(
              'Cada jogo fecha no apito inicial dele, pelo horário do servidor.',
              style: TextStyle(fontSize: 12),
            ),
          ],
          const SizedBox(height: 24),
          SizedBox(
            width: double.infinity,
            child: FilledButton(
              onPressed: () => Navigator.of(context).pop(),
              child: const Text('Entendi, vamos palpitar'),
            ),
          ),
        ],
      ),
    );
  }
}
