import 'package:flutter/material.dart';

import '../provider/data.dart';
import '../utils/game_utils.dart';

class Board {

  static Container buildGameBoard(Data myProvider) {
    String skin = myProvider.skin;

    int maxGuessesCount = myProvider.maxGuessesCount;
    int wordLength = int.parse(myProvider.length);

    Widget buildCellWidget(String cellValue, String cellTip) {
      Color textColor = Colors.white;

      String cellImage = 'empty';
      if (cellTip != '') {
        cellImage = cellTip;
      }

      Image imageWidget = Image(
        image: AssetImage('assets/skins/'+skin+'_'+cellImage+'.png'),
        fit: BoxFit.fill
      );

      Text textWidget = Text(
        cellValue,
        style: TextStyle(
          color: textColor,
          fontSize: 40.0,
          fontWeight: FontWeight.w900,
        ),
        textAlign: TextAlign.center
      );

      return Stack(
        alignment: Alignment.center,

        children: <Widget>[
          imageWidget,
          Center(child: textWidget),
        ]
      );
    }

    List<String> guesses = myProvider.guesses;

    List<TableRow> tableRows = [];
    for (int lineIndex = 0; lineIndex < maxGuessesCount; lineIndex++) {
      String word = '';
      if (lineIndex < guesses.length) {
        word = guesses[lineIndex];
      } else if (lineIndex == guesses.length) {
        word = myProvider.currentGuess;
      }

      List<String> tips = GameUtils.getTips(myProvider, word);

      List<Column> tableCells = [];
      for (int colIndex = 0; colIndex < wordLength; colIndex++) {
        String cellValue = ' ';
        if (word.length > colIndex) {
          cellValue = word[colIndex];
        }

        String cellTip = '';
        if (lineIndex < guesses.length) {
          cellTip = tips[colIndex];
        }

        tableCells.add(
          Column(
            children: [ buildCellWidget(cellValue, cellTip) ]
          )
        );
      };
      tableRows.add(
        TableRow(
          children: tableCells
        )
      );
    }

    return Container(
      margin: EdgeInsets.symmetric(horizontal: 30),
      padding: EdgeInsets.all(2),

      child: Table(
        defaultVerticalAlignment: TableCellVerticalAlignment.middle,
        border: TableBorder.all(
          width: 2.0,
          color: Colors.white,
          style: BorderStyle.solid,
        ),
        children: tableRows,
      )
    );
  }

}