import 'package:shared_preferences/shared_preferences.dart'; import 'package:environment_monitoring_app/services/base_api_service.dart'; class SettingsService { final BaseApiService _baseService = BaseApiService(); // Keys for SharedPreferences static const _inSituChatIdKey = 'telegram_in_situ_chat_id'; static const _tarballChatIdKey = 'telegram_tarball_chat_id'; static const _riverInSituChatIdKey = 'telegram_river_in_situ_chat_id'; static const _riverTriennialChatIdKey = 'telegram_river_triennial_chat_id'; static const _riverInvestigativeChatIdKey = 'telegram_river_investigative_chat_id'; static const _airManualChatIdKey = 'telegram_air_manual_chat_id'; static const _airInvestigativeChatIdKey = 'telegram_air_investigative_chat_id'; static const _marineInvestigativeChatIdKey = 'telegram_marine_investigative_chat_id'; /// Fetches settings from the server and saves them to local storage. Future syncFromServer() async { try { final result = await _baseService.get('settings'); if (result['success'] == true && result['data'] is Map) { final settings = result['data'] as Map; final prefs = await SharedPreferences.getInstance(); // Save all chat IDs from the nested maps await Future.wait([ _saveChatId(prefs, _inSituChatIdKey, settings['marine_in_situ']), _saveChatId(prefs, _tarballChatIdKey, settings['marine_tarball']), _saveChatId(prefs, _riverInSituChatIdKey, settings['river_in_situ']), _saveChatId(prefs, _riverTriennialChatIdKey, settings['river_triennial']), _saveChatId(prefs, _riverInvestigativeChatIdKey, settings['river_investigative']), _saveChatId(prefs, _airManualChatIdKey, settings['air_manual']), _saveChatId(prefs, _airInvestigativeChatIdKey, settings['air_investigative']), _saveChatId(prefs, _marineInvestigativeChatIdKey, settings['marine_investigative']), ]); return true; } return false; } catch (e) { return false; } } Future _saveChatId(SharedPreferences prefs, String key, dynamic settings) async { if (settings is Map) { await prefs.setString(key, settings['telegram_chat_id']?.toString() ?? ''); } } /// Gets the locally stored Chat ID for the In-Situ module. Future getInSituChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_inSituChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the Tarball module. Future getTarballChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_tarballChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the River In-Situ module. Future getRiverInSituChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_riverInSituChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the River Triennial module. Future getRiverTriennialChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_riverTriennialChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the River Investigative module. Future getRiverInvestigativeChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_riverInvestigativeChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the Air Manual module. Future getAirManualChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_airManualChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the Air Investigative module. Future getAirInvestigativeChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_airInvestigativeChatIdKey) ?? ''; } /// Gets the locally stored Chat ID for the Marine Investigative module. Future getMarineInvestigativeChatId() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString(_marineInvestigativeChatIdKey) ?? ''; } }