import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

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

class GameSettings {
  final String boardSize;
  final String colorsCount;

  GameSettings({
    required this.boardSize,
    required this.colorsCount,
  });

  // Getters to convert String to int
  int get boardSizeValue => int.parse(boardSize);
  int get colorsCountValue => int.parse(colorsCount);

  static String getBoardSizeValueFromUnsafe(String size) {
    if (DefaultGameSettings.allowedBoardSizeValues.contains(size)) {
      return size;
    }

    return DefaultGameSettings.defaultBoardSizeValue;
  }

  static String getColorsCountValueFromUnsafe(String colorsCount) {
    if (DefaultGameSettings.allowedColorsCountValues.contains(colorsCount)) {
      return colorsCount;
    }

    return DefaultGameSettings.defaultColorsCountValue;
  }

  factory GameSettings.createDefault() {
    return GameSettings(
      boardSize: DefaultGameSettings.defaultBoardSizeValue,
      colorsCount: DefaultGameSettings.defaultColorsCountValue,
    );
  }

  void dump() {
    printlog('$GameSettings:');
    printlog('  ${DefaultGameSettings.parameterCodeBoardSize}: $boardSize');
    printlog('  ${DefaultGameSettings.parameterCodeColorsCount}: $colorsCount');
    printlog('');
  }

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

  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
      DefaultGameSettings.parameterCodeBoardSize: boardSize,
      DefaultGameSettings.parameterCodeColorsCount: colorsCount,
    };
  }
}