loadApiConfig method

Future<ApiConfig?> loadApiConfig()

Implementation

Future<ApiConfig?> loadApiConfig() async {
  final prefs = await SharedPreferences.getInstance();
  final typeStr = prefs.getString(_providerTypeKey);

  SintSentinel.logger.d('Loading API config for provider: $typeStr');

  if (typeStr == null) {
    final apiKey = await getGeminiApiKey();
    if (apiKey == null) {
      SintSentinel.logger.w('No API key found for gemini (default)');
      return null;
    }
    return ApiConfig.gemini(apiKey: apiKey);
  }

  final type = ApiProviderType.values.firstWhere(
    (t) => t.name == typeStr,
    orElse: () => ApiProviderType.gemini,
  );

  final model = prefs.getString(_modelKey) ?? defaultModel(type);
  final baseUrl = prefs.getString(_baseUrlKey);

  switch (type) {
    case ApiProviderType.gemini:
      final apiKey = await getGeminiApiKey();
      if (apiKey == null) return null;
      return ApiConfig.gemini(apiKey: apiKey, model: model);

    case ApiProviderType.qwen:
      final apiKey = await getQwenApiKey();
      if (apiKey == null) return null;
      return ApiConfig.qwen(apiKey: apiKey, model: model);

    case ApiProviderType.anthropic:
      final apiKey = await getAnthropicApiKey();
      if (apiKey == null) return null;
      return ApiConfig.anthropic(apiKey: apiKey, model: model);

    case ApiProviderType.openai:
      final apiKey = await getOpenAiApiKey();
      return ApiConfig.openai(
        apiKey: apiKey,
        model: model,
        baseUrl: baseUrl ?? 'https://api.openai.com/v1',
      );

    case ApiProviderType.deepseek:
      final apiKey = await getDeepSeekApiKey();
      if (apiKey == null) return null;
      return ApiConfig.deepseek(apiKey: apiKey, model: model);

    case ApiProviderType.ollama:
      return ApiConfig.ollama(
        model: model,
        baseUrl: baseUrl ?? 'http://localhost:11434/v1',
      );

    case ApiProviderType.custom:
    case ApiProviderType.bedrock:
    case ApiProviderType.vertex:
      final apiKey = await getApiKeyForProvider(type);
      return ApiConfig(
        type: type,
        baseUrl: baseUrl ?? 'https://api.openai.com/v1',
        apiKey: apiKey,
        model: model,
      );
  }
}