import 'dart:math';

import 'package:flutter/material.dart';

import '../provider/data.dart';
import '../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: Text('GAME'),
          ),
          SizedBox(height: 2),
          Container(
            height: 150,
            width: double.maxFinite,
            child: gameIsFinished
              ? Game.buildEndGameMessage(myProvider)
              : Text('CONTROLS'),
          ),
        ],
      ),
    );
  }

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

  static FlatButton buildRestartGameButton(Data myProvider) {
    return FlatButton(
      child: Container(
        child: Image(
          image: AssetImage('assets/icons/button_back.png'),
          fit: BoxFit.fill,
        ),
      ),
      onPressed: () => GameUtils.resetGame(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: [ buildRestartGameButton(myProvider) ]),
              Column(children: [ decorationImage ]),
            ],
          ),
        ]
      )
    );
  }

}