import 'package:flutter/material.dart';

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

class Parameters {

  static const double _parameterButtonSize = 70;
  static const double _startButtonSize = 150;

  static Container buildParametersSelector(Data myProvider) {
    return Container(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Parameters.buildParameterSelector(myProvider, 'difficulty'),
          Parameters.buildParameterSelector(myProvider, 'size'),
          Parameters.buildParameterSelector(myProvider, 'skin'),

          Parameters.buildStartGameButton(myProvider),
        ],
      ),
    );
  }


  static Column buildStartGameButton(Data myProvider) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        FlatButton(
          child: Image(
            image: AssetImage('assets/icons/button_start.png'),
            width: _startButtonSize,
            height: _startButtonSize,
            fit: BoxFit.fill
          ),
          onPressed: () => GameUtils.startGame(myProvider),
        )
      ],
    );
  }


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

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


  static FlatButton _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 FlatButton(
      child: Container(
        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),
          width: _parameterButtonSize,
          height: _parameterButtonSize,
          fit: BoxFit.fill
        ),
      ),
      onPressed: () => myProvider.setParameterValue(parameterCode, parameterValue),
    );
  }


}