using RobotNet10.CustomConfiguration.Events;
using RobotNet10.CustomConfiguration.Models;
namespace RobotNet10.CustomConfiguration.Services;
///
/// Implementation của IConfigManager
/// Service cho quản lý và truy vấn configuration variables
///
public class ConfigManager : IConfigManager, IDisposable
{
private readonly IConfigService _configService;
// ==========================================
// EVENTS
// ==========================================
public event EventHandler? ConfigChanged;
///
/// Constructor - Subscribe vào ConfigChanged event từ IConfigService
///
public ConfigManager(IConfigService configService)
{
_configService = configService ?? throw new ArgumentNullException(nameof(configService));
// Forward events from IConfigService to IConfigManager
_configService.ConfigChanged += OnConfigServiceChanged;
}
///
/// Forward ConfigChanged event from IConfigService to IConfigManager subscribers
///
private void OnConfigServiceChanged(object? sender, ConfigChangedEventArgs args)
{
ConfigChanged?.Invoke(this, args);
}
// ==========================================
// CONFIG TYPE OPERATIONS
// ==========================================
public async Task GetConfigByTypeAsync(string configType)
{
return await _configService.GetConfigByTypeAsync(configType);
}
public async Task ConfigTypeExistsAsync(string configType)
{
return await _configService.ConfigTypeExistsAsync(configType);
}
// ==========================================
// VARIABLE EXISTENCE CHECK
// ==========================================
public async Task VariableExistsAsync(string configType, string variableName)
{
var config = await _configService.GetConfigByTypeAsync(configType);
if (config == null)
return false;
return config.Variables.Any(v => v.Name.Equals(variableName, StringComparison.OrdinalIgnoreCase));
}
public async Task VariableExistsAsync(Guid configId, string variableName)
{
var config = await _configService.GetConfigByIdAsync(configId);
if (config == null)
return false;
return config.Variables.Any(v => v.Name.Equals(variableName, StringComparison.OrdinalIgnoreCase));
}
// ==========================================
// GET VARIABLE VALUE
// ==========================================
public async Task