using Microsoft.Extensions.DependencyInjection; using ModVersionChecker.data.model; using ModVersionChecker.managers.interfaces; namespace ModVersionChecker.forms { public class FormFactory : IFormFactory { private readonly IServiceProvider _serviceProvider; public FormFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); } public AppDetailsForm CreateAppDetailsForm(AppConfig? app, bool isEditable, EventHandler? onAppChanged) { var configManager = _serviceProvider.GetRequiredService(); var appsManager = _serviceProvider.GetRequiredService(); var sourcesDefManager = _serviceProvider.GetRequiredService(); var checkerTypesDefManager = _serviceProvider.GetRequiredService(); var flightSimsManager = _serviceProvider.GetRequiredService(); var form = new AppDetailsForm(configManager, appsManager, sourcesDefManager, checkerTypesDefManager, flightSimsManager); form.SetApp(app, false); form.SetEditable(isEditable); if (onAppChanged != null) { form.OnAppChanged += onAppChanged; } return form; } public GlobalConfigForm CreateGlobalConfigForm() { var configManager = _serviceProvider.GetRequiredService(); var form = new GlobalConfigForm(configManager); return form; } public SourcesConfigForm CreateSourcesConfigForm(EventHandler? onSourcesChanged) { var sourcesDefManager = _serviceProvider.GetRequiredService(); var formFactory = _serviceProvider.GetRequiredService(); var form = new SourcesConfigForm(formFactory, sourcesDefManager); if (onSourcesChanged != null) { form.OnSourcesChanged += onSourcesChanged; } return form; } public SourceDetailForm CreateSourceDetailForm(SourceDef? sourceDef, EventHandler? onSourceChanged) { var sourcesDefManager = _serviceProvider.GetRequiredService(); var checkerTypesDefManager = _serviceProvider.GetRequiredService(); var formFactory = _serviceProvider.GetRequiredService(); var form = new SourceDetailForm(formFactory, sourcesDefManager); form.SourceDef = sourceDef; if (onSourceChanged != null) { form.UpdateFields(); form.OnSourceChanged += onSourceChanged; } return form; } } }