import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

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

class GameSettings {
  final String level;
  final String size;

  GameSettings({
    required this.level,
    required this.size,
  });

  static String getLevelValueFromUnsafe(String level) {
    if (DefaultGameSettings.allowedLevelValues.contains(level)) {
      return level;
    }

    return DefaultGameSettings.defaultLevelValue;
  }

  static String getSizeValueFromUnsafe(String size) {
    if (DefaultGameSettings.allowedSizeValues.contains(size)) {
      return size;
    }

    return DefaultGameSettings.defaultSizeValue;
  }

  factory GameSettings.createDefault() {
    return GameSettings(
      level: DefaultGameSettings.defaultLevelValue,
      size: DefaultGameSettings.defaultSizeValue,
    );
  }

  void dump() {
    printlog('$GameSettings:');
    printlog('  ${DefaultGameSettings.parameterCodeLevel}: $level');
    printlog('  ${DefaultGameSettings.parameterCodeSize}: $size');
    printlog('');
  }

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

  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
      DefaultGameSettings.parameterCodeLevel: level,
      DefaultGameSettings.parameterCodeSize: size,
    };
  }
}