import 'package:flutter/material.dart';
import 'package:tetrisdual/layout/board.dart';
import 'package:tetrisdual/provider/data.dart';
import 'package:tetrisdual/utils/game_utils.dart';

class Game {
  static Container buildGameWidget(Data myProvider, double boardWidth) {
    bool gameIsFinished = myProvider.isGameFinished;

    return Container(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          SizedBox(height: 8),
          Game.buildTopIndicatorWidget(myProvider),
          SizedBox(height: 2),
          Expanded(
            child: Board.buildGameBoard(myProvider, boardWidth),
          ),
          SizedBox(height: 2),
          Container(
            child: gameIsFinished ? Game.buildEndGameMessage(myProvider) : SizedBox(height: 2),
          ),
        ],
      ),
    );
  }

  static Widget buildTopIndicatorWidget(Data myProvider) {
    return Table(
      children: [
        TableRow(
          children: [
            Column(
              children: [
                Text(
                  'X',
                  style: TextStyle(
                    fontSize: 40,
                    fontWeight: FontWeight.w600,
                    color: Colors.black,
                  ),
                ),
                Text(
                  'Y',
                  style: TextStyle(
                    fontSize: 15,
                    fontWeight: FontWeight.w600,
                    color: Colors.grey,
                  ),
                ),
              ],
            ),
            Column(
              children: [
                Text(
                  'Z',
                  style: TextStyle(
                    fontSize: 20,
                    fontWeight: FontWeight.w600,
                    color: Colors.green,
                  ),
                ),
              ],
            ),
          ],
        ),
      ],
    );
  }

  static TextButton buildQuitGameButton(Data myProvider) {
    return TextButton(
      child: Image(
        image: AssetImage('assets/icons/button_back.png'),
        fit: BoxFit.fill,
      ),
      onPressed: () => GameUtils.quitGame(myProvider),
    );
  }

  static Container buildEndGameMessage(Data myProvider) {
    String decorationImageAssetName = 'assets/icons/game_fail.png';

    Widget decorationWidget = TextButton(
      child: Image(
        image: AssetImage(decorationImageAssetName),
        fit: BoxFit.fill,
      ),
      onPressed: () => null,
    );

    return Container(
      margin: EdgeInsets.all(2),
      padding: EdgeInsets.all(2),
      child: Table(
        defaultColumnWidth: IntrinsicColumnWidth(),
        children: [
          TableRow(
            children: [
              Column(
                children: [decorationWidget],
              ),
              Column(
                children: [buildQuitGameButton(myProvider)],
              ),
              Column(
                children: [decorationWidget],
              ),
            ],
          ),
        ],
      ),
    );
  }
}