import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:tetrisdual/config/menu.dart';
import 'package:tetrisdual/cubit/game_cubit.dart';
import 'package:tetrisdual/cubit/nav_cubit.dart';
import 'package:tetrisdual/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(StyledButton(
                color: Colors.red,
                onPressed: () {},
                onLongPress: () {
                  BlocProvider.of<GameCubit>(context).quitGame();
                },
                child: const Image(
                  image: AssetImage('assets/ui/button_back.png'),
                  fit: BoxFit.fill,
                ),
              ));
            } else {
              if (pageIndex == Menu.indexGame) {
                // go to Settings page
                menuActions.add(ElevatedButton(
                  onPressed: () {
                    BlocProvider.of<NavCubit>(context).goToSettingsPage();
                  },
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                  ),
                  child: Menu.menuItemSettings.icon,
                ));

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

            return AppBar(
              title: const AppHeader(text: 'app_name'),
              actions: menuActions,
            );
          },
        );
      },
    );
  }

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