using UnityEditor;
using UnityEngine;
namespace LLM.Editor.Client
{
///
/// Responsible for creating and providing the correct instance of an ILlmApiClient
/// based on the project's settings (real or dummy).
///
public static class ApiClientFactory
{
private static ILlmApiClient _clientInstance;
public static ILlmApiClient GetClient()
{
if (_clientInstance == null)
{
var settings = LoadSettings();
if (settings == null) return null;
_clientInstance = settings.useDummyClient ? new DummyApiClient() : new GeminiApiClient();
// Initialize the client after creating it.
// We don't need to wait for the result here, but we fire it off.
_ = _clientInstance.Initialize();
}
return _clientInstance;
}
private static Settings.MCPSettings LoadSettings()
{
var guids = AssetDatabase.FindAssets("t:MCPSettings");
if (guids.Length == 0)
{
Debug.LogError("Could not find MCPSettings asset. Please create one.");
return null;
}
var path = AssetDatabase.GUIDToAssetPath(guids[0]);
return AssetDatabase.LoadAssetAtPath(path);
}
// Call this if settings are changed to force the factory to create a new client on next request.
public static void InvalidateClient()
{
_clientInstance = null;
}
}
}