using AuthorBuddy.Web.Models; namespace AuthorBuddy.Web.Services; public class PluginManager : IPluginManager { private readonly List _plugins = new(); private readonly ISettingsService _settings; public PluginManager(ISettingsService settings, IEnumerable plugins) { _settings = settings; _plugins.AddRange(plugins); } public void Register(IExportPlugin plugin) { if (!_plugins.Any(p => p.Id == plugin.Id)) _plugins.Add(plugin); } public IReadOnlyList GetPlugins() => _plugins.AsReadOnly(); public IExportPlugin? GetPlugin(string id) => _plugins.FirstOrDefault(p => p.Id == id); public async Task GetConfigAsync(string pluginId) { var json = await _settings.GetPluginConfigAsync(pluginId); if (string.IsNullOrEmpty(json)) return null; return System.Text.Json.JsonSerializer.Deserialize(json); } public async Task SaveConfigAsync(PluginConfig config) { var json = System.Text.Json.JsonSerializer.Serialize(config); await _settings.SavePluginConfigAsync(config.PluginId, json); } }