using System;
using System.Collections.Generic;
using ZeroLevel.Services.Serialization;
namespace ZeroLevel
{
///
/// Интерфейс конфигурационных данных
///
public interface IConfiguration :
IEquatable,
IBinarySerializable
{
#region Properties
///
/// Получение списка значений по ключу
///
IEnumerable this[string key] { get; }
///
/// Перечисление ключей
///
IEnumerable Keys { get; }
///
/// Указывает что конфигурация заблокирована на изменения
///
bool Freezed { get; }
#endregion
#region Methods
///
/// Получение списка значений параметра по ключу
///
/// Имя параметра
/// Список значений
IEnumerable Items(string key);
///
/// Получение одного(первого) значения параметра по ключу
///
string First(string key);
///
/// Получить первое значение в виде объекта типа T
///
T First(string key);
///
/// Получить первое значение или значение по умолчанию
///
string FirstOrDefault(string name, string defaultValue);
///
/// Получить первое значение в виде объекта типа T или получить значение по умолчанию
///
T FirstOrDefault(string name);
///
/// Получить первое значение в виде объекта типа T или получить переданное значение по умолчанию
///
T FirstOrDefault(string name, T defaultValue);
///
/// Проверка наличия ключа
///
bool Contains(string key);
///
/// Проверка наличия одного из ключей
///
bool Contains(params string[] keys);
///
/// Проверка наличия значения по ключу
///
bool ContainsValue(string key, string value);
///
/// Количество значений параметра
///
int Count(string key);
///
/// Выполняет указанное действие только в случае если в конфигурации есть ключ
///
void DoWithFirst(string key, Action action);
///
/// Выполняет указанное действие только в случае если в конфигурации есть ключ
///
void DoWithFirst(string key, Action action);
#endregion
#region Create, Clean, Delete
///
/// Очистка всей секции
///
IConfiguration Clear();
///
/// Очистка значения ключа
///
IConfiguration Clear(string key);
///
/// Удаление ключа и значений
///
IConfiguration Remove(string key);
///
/// Добавление параметра
///
IConfiguration Append(string key, string value);
///
/// Задает значение в единственном числе,
/// существующее значение будет перезаписано
///
IConfiguration SetUnique(string key, string value);
///
/// Запрещает вносить какие-либо изменения в конфигурацию
///
/// false - если уже установлен запрет
bool Freeze(bool permanent = false);
///
/// Убирает запрет на внесение изменений в конфигурацию
///
/// false - если запрет снят
bool Unfreeze();
#endregion
}
}