namespace MyBiz.Core; /// /// Реестр типов продуктов - центрлизованное хранилище конфигураций /// Поддерживает моддинг через загрузку внешних конфигураций /// public class ProductRegistry { private readonly Dictionary _productTypes = new(); /// /// Все зарегистрированные типы продуктов /// public IEnumerable AllProductTypes => _productTypes.Values; /// /// Количество зарегистрированных типов /// public int Count => _productTypes.Count; /// /// Событие: добавлен новый тип продукта (для моддинга) /// public event Action? ProductTypeAdded; /// /// Событие: изменён тип продукта /// public event Action? ProductTypeModified; /// /// Зарегистрировать тип продукта /// public void Register(ProductType productType) { if (string.IsNullOrEmpty(productType.Id)) throw new ArgumentException("Product type must have an Id", nameof(productType)); if (_productTypes.ContainsKey(productType.Id)) throw new InvalidOperationException($"Product type '{productType.Id}' is already registered"); _productTypes[productType.Id] = productType; ProductTypeAdded?.Invoke(productType); } /// /// Получить тип продукта по ID /// public ProductType? GetById(string id) { return _productTypes.TryGetValue(id, out var type) ? type : null; } /// /// Получить тип продукта или выбросить исключение /// public ProductType GetOrThrow(string id) { return GetById(id) ?? throw new KeyNotFoundException($"Product type '{id}' not found"); } /// /// Проверка: существует ли тип продукта /// public bool Exists(string id) { return _productTypes.ContainsKey(id); } /// /// Получить продукты по категории /// public IEnumerable GetByCategory(ProductCategory category) { return _productTypes.Values.Where(p => p.Category == category); } /// /// Получить продукты, доступные в указанном году /// public IEnumerable GetAvailableInYear(int year) { return _productTypes.Values.Where(p => p.AvailableFromYear <= year); } /// /// Удалить тип продукта (для моддинга) /// public bool Remove(string id) { if (_productTypes.Remove(id)) { ProductTypeModified?.Invoke(new ProductType { Id = id }); return true; } return false; } /// /// Загрузить типы продуктов из конфигурации (JSON и т.п.) /// public void LoadFromConfig(string jsonConfig) { // TODO: Реализовать загрузку из JSON // Это позволит модам добавлять свои продукты } /// /// Экспортировать все типы в JSON (для моддинга) /// public string ExportToJson() { // TODO: Реализовать экспорт в JSON return "{}"; } }