import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:petitbac/config/default_game_settings.dart';

class GameSettings {
  final String itemsCount;
  final String timerValue;

  GameSettings({
    required this.itemsCount,
    required this.timerValue,
  });

  int get itemsCountValue => DefaultGameSettings.getItemsCountValueFromCode(itemsCount);
  int get timerCountValue => DefaultGameSettings.getTimerValueFromCode(timerValue);

  static String getItemsCountValueFromUnsafe(String itemsCount) {
    if (DefaultGameSettings.allowedItemsCountValues.contains(itemsCount)) {
      return itemsCount;
    }

    return DefaultGameSettings.defaultItemsCountValue;
  }

  static String getTimerValueFromUnsafe(String timerValue) {
    if (DefaultGameSettings.allowedTimerValues.contains(timerValue)) {
      return timerValue;
    }

    return DefaultGameSettings.defaultTimerValue;
  }

  factory GameSettings.createDefault() {
    return GameSettings(
      itemsCount: DefaultGameSettings.defaultItemsCountValue,
      timerValue: DefaultGameSettings.defaultTimerValue,
    );
  }

  void dump() {
    printlog('$GameSettings:');
    printlog('  ${DefaultGameSettings.parameterCodeItemsCount}: $itemsCount');
    printlog('  ${DefaultGameSettings.parameterCodeTimerValue}: $timerValue');
    printlog('');
  }

  @override
  String toString() {
    return '$GameSettings(${toJson()})';
  }

  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
      DefaultGameSettings.parameterCodeItemsCount: itemsCount,
      DefaultGameSettings.parameterCodeTimerValue: timerValue,
    };
  }
}