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

class Game {
  static Container buildGameWidget(Data myProvider) {
    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),
          ),
          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(
                  '♟️ ' + myProvider.remainingPegsCount.toString(),
                  style: TextStyle(
                    fontSize: 40,
                    fontWeight: FontWeight.w600,
                    color: Colors.black,
                  ),
                ),
              ],
            ),
            Column(
              children: [
                Text(
                  myProvider.movesCount.toString(),
                  style: TextStyle(
                    fontSize: 20,
                    fontWeight: FontWeight.w600,
                    color: Colors.green,
                  ),
                ),
              ],
            ),
          ],
        ),
      ],
    );
  }

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

  static Container buildEndGameMessage(Data myProvider) {
    String decorationImageAssetName = '';
    if (myProvider.gameWon()) {
      decorationImageAssetName = 'assets/icons/game_win.png';
    } else {
      decorationImageAssetName = 'assets/icons/game_fail.png';
    }

    Image decorationImage = Image(
      image: AssetImage(decorationImageAssetName),
      fit: BoxFit.fill,
    );

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