currentEnvironment property

Environment get currentEnvironment

Get current environment

Implementation

Environment get currentEnvironment {
  final currentEnvName = _prefs?.getString(_currentEnvKey);
  final hasUserSelected = _prefs?.getBool(_hasUserSelectedKey) ?? false;

  // If user has selected an environment before, use saved or first available
  if (hasUserSelected) {
    if (currentEnvName != null && environments.containsKey(currentEnvName.toLowerCase())) {
      return environments[currentEnvName.toLowerCase()]!;
    }
    // If saved environment not found, return first available
    if (environments.isNotEmpty) {
      return environments.values.first;
    }
  }

  // First time opening app - return default environment
  if (environments.isEmpty) {
    // If no environments exist, return a default one
    return Environment(
      name: EnvironmentType.development.displayName,
      baseUrl: 'https://dev-api.example.com',
      description: EnvironmentType.development.description,
      isDefault: true,
    );
  }

  // Always prefer production as default, then first available
  final defaultEnv = environments.values.firstWhere(
    (env) => env.name.toLowerCase() == EnvironmentType.production.displayName.toLowerCase(),
    orElse: () => environments.values.firstWhere(
      (env) => env.isDefault,
      orElse: () => environments.values.first,
    ),
  );

  // Mark that we're using default (first time)
  // Don't set hasUserSelected to true yet - only when user explicitly changes
  return defaultEnv;
}