using System;
using System.Collections.Generic;
using ZeroLevel.Services.Serialization;
namespace ZeroLevel
{
///
/// Интерфейс набора конфигурационных данных
///
public interface IConfigurationSet :
IEquatable,
IBinarySerializable
{
#region Properties
///
/// Получение конфигурации по умолчанию
///
IConfiguration Default { get; }
///
/// Получение конфигурации по имени
///
IConfiguration this[string sectionName] { get; }
///
/// Получение имен конфигураций
///
IEnumerable SectionNames { get; }
///
/// Получение всех конфигураций
///
IEnumerable Sections { get; }
///
/// Указывает, заблокирован или нет набор секций
///
bool SectionsFreezed { get; }
#endregion
#region Methods
///
/// Создание секции параметров
///
/// Название секции
IConfiguration CreateSection(string sectionName);
///
/// Запрос секции данных по имени секции
///
/// Название секции
/// Секция с данными
IConfiguration GetSection(string sectionName);
///
/// Проверка наличия секции с указанным именем
///
/// Название секции
/// true - секция существует
bool ContainsSection(string sectionName);
///
/// Удаление секции
///
/// Название секции
/// false - если секция уже удалена или не существует
bool RemoveSection(string sectionName);
///
/// Запрещает вносить какие-либо изменения в существующую конфигурацию во всех секциях
/// а также менять набор секций
///
/// false - если уже установлен запрет
bool FreezeConfiguration(bool permanent = false);
///
/// Запрещает вносить какие-либо изменения в существующий набор секций
///
/// false - если уже установлен запрет
bool FreezeSections(bool permanent = false);
///
/// Убирает запрет на внесение изменений в существующую конфигурацию во всех секциях
/// а также разрешает менять набор секций
///
/// false - если запрет снят
bool UnfreezeConfiguration();
///
/// Убирает запрет на внесение изменений в существующий набор секций
///
/// false - если запрет снят
bool UnfreezeSections();
#endregion
}
}