import 'package:flutter/material.dart';

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

class Parameters {

  static Container buildParametersSelector(Data myProvider) {
    return Container(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          SizedBox(height: 5),
          Expanded(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Parameters.buildParameterSelector(myProvider, 'level'),
                SizedBox(height: 5),
                Parameters.buildParameterSelector(myProvider, 'size'),
                SizedBox(height: 5),
              ],
            ),
          ),
          SizedBox(height: 5),
          Container(
            child: Parameters.buildStartGameButton(myProvider),
          ),
        ],
      ),
    );
  }

  static Container buildStartGameButton(Data myProvider) {
    Column decorationImage = Column(
      children: [
        Image(
          image: AssetImage('assets/icons/game_win.png'),
          fit: BoxFit.fill
        ),
      ]
    );

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

      child: Table(
        defaultColumnWidth: IntrinsicColumnWidth(),
        children: [
          TableRow(
            children: [
              decorationImage,
              Column(
                children: [
                  FlatButton(
                    child: Container(
                      child: Image(
                        image: AssetImage('assets/icons/button_start.png'),
                        fit: BoxFit.fill,
                      ),
                    ),
                    onPressed: () => GameUtils.startGame(myProvider),
                  ),
                ]
              ),
              decorationImage,
            ],
          ),
        ]
      )
    );
  }

  static Widget buildParameterSelector(Data myProvider, String parameterCode) {
    List availableValues = myProvider.getParameterAvailableValues(parameterCode);

    if (availableValues.length == 1) {
      return SizedBox(height: 1);
    }

    return Table(
      defaultColumnWidth: IntrinsicColumnWidth(),
      children: [
        TableRow(
          children: [
            for (var index = 0; index < availableValues.length; index++)
              Column(
                children: [
                  _buildParameterButton(myProvider, parameterCode, availableValues[index])
                ]
              ),
          ],
        ),
      ],
    );
  }

  static Widget _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) {
    String currentValue = myProvider.getParameterValue(parameterCode).toString();

    bool isActive = (parameterValue == currentValue);
    String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png';

    return TextButton(
      child: Container(
        padding: EdgeInsets.all(2),
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(10),
          border: Border.all(
            color: isActive ? Colors.blue : Colors.white,
            width: 10,
          ),
        ),
        child: Image(
          image: AssetImage(imageAsset),
          fit: BoxFit.fill,
        ),
      ),
      onPressed: () => myProvider.setParameterValue(parameterCode, parameterValue),
    );
  }

}