import 'package:petitbac/utils/tools.dart';

class DefaultGameSettings {
  // available game parameters codes
  static const String parameterCodeItemsCount = 'itemsCount';
  static const String parameterCodeTimerValue = 'timerValue';
  static const List<String> availableParameters = [
    parameterCodeItemsCount,
    parameterCodeTimerValue,
  ];

  // items count: available values
  static const String itemsCountValueNoLimit = 'nolimit';
  static const String itemsCountValueShort = 'short';
  static const String itemsCountValueMedium = 'medium';
  static const String itemsCountValueLong = 'long';
  static const List<String> allowedItemsCountValues = [
    itemsCountValueNoLimit,
    itemsCountValueShort,
    itemsCountValueMedium,
    itemsCountValueLong,
  ];
  // items count: default value
  static const String defaultItemsCountValue = itemsCountValueMedium;

  // timer value: available values
  static const String timerValueNoTimer = 'nolimit';
  static const String timerValueLow = 'low';
  static const String timerValueMedium = 'medium';
  static const String timerValueHigh = 'high';
  static const List<String> allowedTimerValues = [
    timerValueNoTimer,
    timerValueLow,
    timerValueMedium,
    timerValueHigh,
  ];
  // timer value: default value
  static const String defaultTimerValue = timerValueMedium;

  // available values from parameter code
  static List<String> getAvailableValues(String parameterCode) {
    switch (parameterCode) {
      case parameterCodeItemsCount:
        return DefaultGameSettings.allowedItemsCountValues;
      case parameterCodeTimerValue:
        return DefaultGameSettings.allowedTimerValues;
    }

    printlog('Did not find any available value for game parameter "$parameterCode".');
    return [];
  }

  static int getItemsCountValueFromCode(String itemsCountParameterValue) {
    const Map<String, int> values = {
      DefaultGameSettings.itemsCountValueNoLimit: 0,
      DefaultGameSettings.itemsCountValueShort: 5,
      DefaultGameSettings.itemsCountValueMedium: 10,
      DefaultGameSettings.itemsCountValueLong: 20,
    };
    return values[itemsCountParameterValue] ??
        getItemsCountValueFromCode(DefaultGameSettings.defaultItemsCountValue);
  }

  static int getTimerValueFromCode(String timerValueParameterValue) {
    const Map<String, int> values = {
      timerValueNoTimer: 0,
      timerValueLow: 5,
      timerValueMedium: 30,
      timerValueHigh: 90,
    };
    return values[timerValueParameterValue] ??
        getTimerValueFromCode(DefaultGameSettings.defaultTimerValue);
  }
}