import 'package:flutter/material.dart';

import 'package:calculus/provider/data.dart';
import 'package:calculus/utils/game_utils.dart';

class Game {
  static Widget buildGameWidget(Data myProvider) {
    final bool gameIsFinished = myProvider.isGameFinished();

    return Column(
      mainAxisAlignment: MainAxisAlignment.start,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        const SizedBox(height: 8),
        Game.buildTopIndicatorWidget(myProvider),
        const SizedBox(height: 2),
        const Expanded(
          child: Text('GAME'),
        ),
        const SizedBox(height: 2),
        SizedBox(
          height: 150,
          width: double.maxFinite,
          child:
              gameIsFinished ? Game.buildEndGameMessage(myProvider) : const Text('CONTROLS'),
        ),
      ],
    );
  }

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

  static Widget 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: const EdgeInsets.all(2),
        padding: const EdgeInsets.all(2),
        child: Table(defaultColumnWidth: const IntrinsicColumnWidth(), children: [
          TableRow(
            children: [
              Column(children: [decorationImage]),
              Column(children: [buildRestartGameButton(myProvider)]),
              Column(children: [decorationImage]),
            ],
          ),
        ]));
  }
}