import 'package:shared_preferences/shared_preferences.dart';
import 'package:smoke_cess_app/models/settings.dart';
import 'package:smoke_cess_app/service/json_service.dart';

//access group setting which was saved in local storage
Future<int?> getGroup() => _getIntSetting('group');

Future<List<String>?> getRelapseCategories() =>
    _getStringListSetting('relapse_categories');

Future<List<String>?> getSleepQueryDaysCategories() =>
    _getStringListSetting('sleep_query_days');

Future<int?> getSleepQueryHours() => _getIntSetting('sleep_query_hours');
Future<int?> getSleepQueryMinutes() => _getIntSetting('sleep_query_minutes');

Future<List<String>?> getMoodQueryDaysCategories() =>
    _getStringListSetting('mood_query_days');

Future<int?> getMoodQueryHours() => _getIntSetting('mood_query_hours');
Future<int?> getMoodQueryMinutes() => _getIntSetting('mood_query_minutes');

Future<int?> getChessHours() => _getIntSetting('chess_hours');
Future<int?> getChessMinutes() => _getIntSetting('chess_minutes');

void _setStringSetting(String settingKey, String settingValue) =>
    SharedPreferences.getInstance()
        .then((pref) => pref.setString(settingKey, settingValue));

Future<String?> _getStringSetting(String settingKey) =>
    SharedPreferences.getInstance().then((pref) => pref.getString(settingKey));

void _setIntSetting(String settingKey, int settingValue) =>
    SharedPreferences.getInstance()
        .then((pref) => pref.setInt(settingKey, settingValue));

Future<int?> _getIntSetting(String settingKey) =>
    SharedPreferences.getInstance().then((pref) => pref.getInt(settingKey));

void _setStringListSetting(String settingKey, List<String> list) =>
    SharedPreferences.getInstance()
        .then((pref) => pref.setStringList(settingKey, list));

Future<List<String>?> _getStringListSetting(String settingKey) =>
    SharedPreferences.getInstance()
        .then((pref) => pref.getStringList(settingKey));

Future<void> loadSettingsFromLocalJSON() async {
  Map<String, dynamic> configJSON = await loadLocalConfigJSON();
  Settings settings = Settings.fromJson(configJSON);
  saveSettings(settings);
}

void saveSettings(Settings settings) {
  _setIntSetting('group', settings.group);
  _setStringListSetting('relapse_categories', settings.relapseCategories!);
  _setStringListSetting('mood_query_days', settings.moodQuery.days!);
  _setIntSetting('mood_query_hours', settings.moodQuery.hours);
  _setIntSetting('mood_query_minutes', settings.moodQuery.minutes);
  _setStringListSetting('sleep_query_days', settings.sleepQuery.days!);
  _setIntSetting('sleep_query_hours', settings.sleepQuery.hours);
  _setIntSetting('sleep_query_minutes', settings.sleepQuery.minutes);
  if (settings.chessTime != null) {
    _setIntSetting('chess_hours', settings.chessTime!.hours);
    _setIntSetting('chess_minutes', settings.chessTime!.minutes);
  }
}