import 'package:flutter/material.dart';

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

class Parameters {
  static Container buildParametersSelector(Data myProvider) {
    return Container(
      padding: EdgeInsets.all(2),
      margin: EdgeInsets.all(2),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Parameters.buildParameterSelector(myProvider, 'lang'),
          SizedBox(height: 5),
          Parameters.buildParameterSelector(myProvider, 'length'),
          SizedBox(height: 5),
          Parameters.buildParameterSelector(myProvider, 'skin'),
          SizedBox(height: 5),
          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: [
                  TextButton(
                    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 TextButton _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),
    );
  }
}