import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:unicons/unicons.dart';

import 'package:random/cubit/game_cubit.dart';
import 'package:random/models/game/game.dart';
import 'package:random/ui/widgets/game/game_settings.dart';
import 'package:random/ui/widgets/game/game_board.dart';

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

  @override
  State<GamePage> createState() => _GamePageState();
}

class _GamePageState extends State<GamePage> {
  Widget buildGameActionsBloc(BuildContext context) {
    return BlocBuilder<GameCubit, GameState>(builder: (context, gameState) {
      final GameCubit gameCubit = BlocProvider.of<GameCubit>(context);

      final List<Widget> buttons = [
        IconButton(
          onPressed: () {
            gameCubit.updateGameState(Game.createNew());
          },
          icon: const Icon(UniconsSolid.star),
          color: Theme.of(context).colorScheme.primary,
        )
      ];

      if (gameState.game?.isRunning == true) {
        buttons.add(IconButton(
          onPressed: () {
            final Game currentGame = gameCubit.state.game!;
            currentGame.stop();

            gameCubit.updateGameState(currentGame);
            setState(() {});
          },
          icon: const Icon(UniconsLine.exit),
          color: Theme.of(context).colorScheme.primary,
        ));
      }

      return Row(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: buttons,
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    const double boardWidgetWidth = 300;
    const double boardWidgetHeight = 300;

    return BlocBuilder<GameCubit, GameState>(
      builder: (context, gameState) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            gameState.game?.isRunning == true
                ? GameBoardWidget(
                    game: gameState.game!,
                    widgetSize: const Size(boardWidgetWidth, boardWidgetHeight),
                  )
                : const GameSettingsWidget(),
            buildGameActionsBloc(context),
          ],
        );
      },
    );
  }
}