// filepath: lib/config/environment_config.dart import 'package:hmg_patient_app/config/config.dart'; import 'package:hmg_patient_app/uitl/app_shared_preferences.dart'; // ─── Keys for SharedPreferences ─────────────────────────────────────────────── const ENV_BASE_URL_KEY = 'env_base_url'; const ENV_RC_BASE_URL_KEY = 'env_rc_base_url'; const ENV_PHARMACY_BASE_URL_KEY = 'env_pharmacy_base_url'; const ENV_EXA_CART_BASE_URL_KEY = 'env_exa_cart_base_url'; const ENV_PAYFORT_KEY = 'env_payfort'; // ─── Preset environments ─────────────────────────────────────────────────────── class AppEnvironmentPreset { final String label; final String baseUrl; final String rcBaseUrl; final String pharmacyBaseUrl; final String exaCartBaseUrl; final String payfortMode; // 'production' | 'sandbox' const AppEnvironmentPreset({ required this.label, required this.baseUrl, required this.rcBaseUrl, required this.pharmacyBaseUrl, required this.exaCartBaseUrl, required this.payfortMode, }); } const List kEnvironmentPresets = [ AppEnvironmentPreset( label: 'Production', baseUrl: 'https://hmgwebservices.com/', rcBaseUrl: 'https://rc.hmg.com/', pharmacyBaseUrl: 'https://mdlaboratories.com/exacartapi/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'production', ), AppEnvironmentPreset( label: 'UAT', baseUrl: 'https://uat.hmgwebservices.com/', rcBaseUrl: 'https://rc.hmg.com/test/', pharmacyBaseUrl: 'https://uat.hmgwebservices.com/epharmacy/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'sandbox', ), AppEnvironmentPreset( label: 'VidaPlus UAT', baseUrl: 'https://vidauat.cloudsolutions.com.sa/', rcBaseUrl: 'https://rc.hmg.com/', pharmacyBaseUrl: 'https://mdlaboratories.com/exacartapitest/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'sandbox', ), AppEnvironmentPreset( label: 'VidaMerge UAT', baseUrl: 'https://vidamergeuat.cloudsolutions.com.sa/', rcBaseUrl: 'https://rc.hmg.com/', pharmacyBaseUrl: 'https://mdlaboratories.com/exacartapitest/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'sandbox', ), AppEnvironmentPreset( label: 'Orash UAT', baseUrl: 'https://orash.cloudsolutions.com.sa/', rcBaseUrl: 'https://rc.hmg.com/', pharmacyBaseUrl: 'https://mdlaboratories.com/exacartapi/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'sandbox', ), AppEnvironmentPreset( label: 'MS HMG RC', baseUrl: 'https://hmgwebservices.com/', rcBaseUrl: 'https://ms.hmg.com/rc/', pharmacyBaseUrl: 'https://mdlaboratories.com/exacartapi/api/', exaCartBaseUrl: 'https://mdlaboratories.com/offersdiscounts', payfortMode: 'production', ), ]; // ─── Service ─────────────────────────────────────────────────────────────────── class EnvironmentConfigService { static final EnvironmentConfigService instance = EnvironmentConfigService._internal(); EnvironmentConfigService._internal(); final AppSharedPreferences _prefs = AppSharedPreferences(); /// Apply stored environment or fall back to production defaults. Future applyStoredEnvironment() async { final storedBase = await _prefs.getString(ENV_BASE_URL_KEY); final storedRc = await _prefs.getString(ENV_RC_BASE_URL_KEY); final storedPharmacy = await _prefs.getString(ENV_PHARMACY_BASE_URL_KEY); final storedExaCart = await _prefs.getString(ENV_EXA_CART_BASE_URL_KEY); if (storedBase != null && storedBase.isNotEmpty) BASE_URL = storedBase; if (storedRc != null && storedRc.isNotEmpty) RC_BASE_URL = storedRc; if (storedPharmacy != null && storedPharmacy.isNotEmpty) { BASE_PHARMACY_URL = storedPharmacy; PHARMACY_BASE_URL = storedPharmacy; } if (storedExaCart != null && storedExaCart.isNotEmpty) EXA_CART_API_BASE_URL = storedExaCart; } /// Save an environment preset and apply it immediately to the global config vars. Future applyPreset(AppEnvironmentPreset preset) async { await _prefs.setString(ENV_BASE_URL_KEY, preset.baseUrl); await _prefs.setString(ENV_RC_BASE_URL_KEY, preset.rcBaseUrl); await _prefs.setString(ENV_PHARMACY_BASE_URL_KEY, preset.pharmacyBaseUrl); await _prefs.setString(ENV_EXA_CART_BASE_URL_KEY, preset.exaCartBaseUrl); await _prefs.setString(ENV_PAYFORT_KEY, preset.payfortMode); BASE_URL = preset.baseUrl; RC_BASE_URL = preset.rcBaseUrl; BASE_PHARMACY_URL = preset.pharmacyBaseUrl; PHARMACY_BASE_URL = preset.pharmacyBaseUrl; EXA_CART_API_BASE_URL = preset.exaCartBaseUrl; } /// Clears all saved environment prefs so the app falls back to the /// hardcoded production URLs defined in config.dart. Future resetToDefault() async { await _prefs.remove(ENV_BASE_URL_KEY); await _prefs.remove(ENV_RC_BASE_URL_KEY); await _prefs.remove(ENV_PHARMACY_BASE_URL_KEY); await _prefs.remove(ENV_EXA_CART_BASE_URL_KEY); await _prefs.remove(ENV_PAYFORT_KEY); // Reset runtime vars back to the values compiled in config.dart BASE_URL = 'https://hmgwebservices.com/'; RC_BASE_URL = 'https://rc.hmg.com/'; BASE_PHARMACY_URL = 'https://mdlaboratories.com/exacartapi/api/'; PHARMACY_BASE_URL = 'https://mdlaboratories.com/exacartapi/api/'; EXA_CART_API_BASE_URL = 'https://mdlaboratories.com/offersdiscounts'; } Future getCurrentBaseUrl() async { return (await _prefs.getString(ENV_BASE_URL_KEY)) ?? BASE_URL; } Future getCurrentRcUrl() async { return (await _prefs.getString(ENV_RC_BASE_URL_KEY)) ?? RC_BASE_URL; } Future getCurrentPharmacyUrl() async { return (await _prefs.getString(ENV_PHARMACY_BASE_URL_KEY)) ?? PHARMACY_BASE_URL; } Future getCurrentExaCartUrl() async { return (await _prefs.getString(ENV_EXA_CART_BASE_URL_KEY)) ?? EXA_CART_API_BASE_URL; } Future getCurrentPayfortMode() async { return (await _prefs.getString(ENV_PAYFORT_KEY)) ?? 'production'; } /// Find preset whose baseUrl matches the currently saved one. Future getCurrentPreset() async { final storedBase = await getCurrentBaseUrl(); try { return kEnvironmentPresets.firstWhere((p) => p.baseUrl == storedBase); } catch (_) { return null; } } }