using Common.Configuration.Arr;
using Common.Configuration.ContentBlocker;
using Common.Configuration.DownloadCleaner;
using Common.Configuration.DownloadClient;
using Common.Configuration.General;
using Common.Configuration.IgnoredDownloads;
using Common.Configuration.Notification;
using Common.Configuration.QueueCleaner;
namespace Infrastructure.Configuration;
///
/// Provides configuration management for various components with thread-safe file access.
///
public interface IConfigManager
{
Task EnsureFilesExist();
Task GetConfigurationAsync() where T : class, new();
Task SaveConfigurationAsync(T config) where T : class;
T GetConfiguration() where T : class, new();
bool SaveConfiguration(T config) where T : class;
// Configuration files - Async methods
// Task GetConfigurationAsync(string configFileName) where T : class, new();
// Task SaveConfigurationAsync(string configFileName, T config) where T : class;
// Task UpdateConfigurationPropertyAsync(string configFileName, string propertyPath, T value);
// Task MergeConfigurationAsync(string configFileName, T newValues) where T : class;
// Task DeleteConfigurationAsync(string configFileName);
// IEnumerable ListConfigurationFiles();
// Configuration files - Sync methods
// T? GetConfiguration(string configFileName) where T : class, new();
// bool SaveConfiguration(string configFileName, T config) where T : class;
// bool UpdateConfigurationProperty(string configFileName, string propertyPath, T value);
// bool MergeConfiguration(string configFileName, T newValues) where T : class;
// bool DeleteConfiguration(string configFileName);
// Specific configuration types - Async methods
// Task GetGeneralConfigAsync();
// Task GetSonarrConfigAsync();
// Task GetRadarrConfigAsync();
// Task GetLidarrConfigAsync();
// Task GetContentBlockerConfigAsync();
// Task GetQueueCleanerConfigAsync();
// Task GetDownloadCleanerConfigAsync();
// Task GetDownloadClientConfigAsync();
// Task GetIgnoredDownloadsConfigAsync();
// Task GetNotificationsConfigAsync();
//
// Task SaveGeneralConfigAsync(GeneralConfig config);
// Task SaveSonarrConfigAsync(SonarrConfig config);
// Task SaveRadarrConfigAsync(RadarrConfig config);
// Task SaveLidarrConfigAsync(LidarrConfig config);
// Task SaveContentBlockerConfigAsync(ContentBlockerConfig config);
// Task SaveQueueCleanerConfigAsync(QueueCleanerConfig config);
// Task SaveDownloadCleanerConfigAsync(DownloadCleanerConfig config);
// Task SaveDownloadClientConfigAsync(DownloadClientConfig config);
// Task SaveIgnoredDownloadsConfigAsync(IgnoredDownloadsConfig config);
// Task SaveNotificationsConfigAsync(NotificationsConfig config);
//
// // Specific configuration types - Sync methods
// GeneralConfig GetGeneralConfig();
// SonarrConfig GetSonarrConfig();
// RadarrConfig GetRadarrConfig();
// LidarrConfig GetLidarrConfig();
// ContentBlockerConfig GetContentBlockerConfig();
// QueueCleanerConfig GetQueueCleanerConfig();
// DownloadCleanerConfig GetDownloadCleanerConfig();
// DownloadClientConfig GetDownloadClientConfig();
// IgnoredDownloadsConfig GetIgnoredDownloadsConfig();
// NotificationsConfig GetNotificationsConfig();
//
// bool SaveGeneralConfig(GeneralConfig config);
// bool SaveSonarrConfig(SonarrConfig config);
// bool SaveRadarrConfig(RadarrConfig config);
// bool SaveLidarrConfig(LidarrConfig config);
// bool SaveContentBlockerConfig(ContentBlockerConfig config);
// bool SaveQueueCleanerConfig(QueueCleanerConfig config);
// bool SaveDownloadCleanerConfig(DownloadCleanerConfig config);
// bool SaveDownloadClientConfig(DownloadClientConfig config);
// bool SaveIgnoredDownloadsConfig(IgnoredDownloadsConfig config);
// bool SaveNotificationsConfig(NotificationsConfig config);
}