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

import 'package:sudoku/config/menu.dart';
import 'package:sudoku/cubit/game_cubit.dart';
import 'package:sudoku/cubit/nav_cubit.dart';
import 'package:sudoku/models/game/game.dart';

class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
  const GlobalAppBar({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<GameCubit, GameState>(
      builder: (BuildContext context, GameState gameState) {
        return BlocBuilder<NavCubit, int>(
          builder: (BuildContext context, int pageIndex) {
            final Game currentGame = gameState.currentGame;

            final List<Widget> menuActions = [];

            if (currentGame.isRunning && !currentGame.isFinished) {
              menuActions.add(TextButton(
                onPressed: () {},
                onLongPress: () {
                  BlocProvider.of<GameCubit>(context).quitGame();
                },
                child: Container(
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(4),
                    border: Border.all(
                      color: Colors.white,
                      width: 3,
                    ),
                  ),
                  child: const Image(
                    image: AssetImage('assets/ui/button_back.png'),
                    fit: BoxFit.fill,
                  ),
                ),
              ));
              menuActions.add(const Spacer(flex: 6));
            } else {
              if (pageIndex == Menu.indexGame) {
                // go to Settings page
                menuActions.add(ElevatedButton(
                  onPressed: () {
                    context.read<NavCubit>().goToSettingsPage();
                  },
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                  ),
                  child: Menu.menuItemSettings.icon,
                ));

                // go to About page
                menuActions.add(ElevatedButton(
                  onPressed: () {
                    context.read<NavCubit>().goToAboutPage();
                  },
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                  ),
                  child: Menu.menuItemAbout.icon,
                ));
              } else {
                // back to Home page
                menuActions.add(ElevatedButton(
                  onPressed: () {
                    context.read<NavCubit>().goToGamePage();
                  },
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                  ),
                  child: Menu.menuItemGame.icon,
                ));
              }
            }

            return AppBar(
              title: const SizedBox.shrink(),
              actions: menuActions,
            );
          },
        );
      },
    );
  }

  @override
  Size get preferredSize => const Size.fromHeight(50);
}