using GFramework.Core.Abstractions.events;
using GFramework.Core.Abstractions.utility;
namespace GFramework.Core.Abstractions.configuration;
///
/// 配置管理器接口,提供类型安全的配置存储和访问
/// 线程安全:所有方法都是线程安全的
///
public interface IConfigurationManager : IUtility
{
///
/// 获取配置数量
///
int Count { get; }
///
/// 获取指定键的配置值
///
/// 配置值类型
/// 配置键
/// 配置值,如果不存在则返回类型默认值
T? GetConfig(string key);
///
/// 获取指定键的配置值,如果不存在则返回默认值
///
/// 配置值类型
/// 配置键
/// 默认值
/// 配置值或默认值
T GetConfig(string key, T defaultValue);
///
/// 设置指定键的配置值
///
/// 配置值类型
/// 配置键
/// 配置值
void SetConfig(string key, T value);
///
/// 检查指定键的配置是否存在
///
/// 配置键
/// 如果存在返回 true,否则返回 false
bool HasConfig(string key);
///
/// 移除指定键的配置
///
/// 配置键
/// 如果成功移除返回 true,否则返回 false
bool RemoveConfig(string key);
///
/// 清空所有配置
///
void Clear();
///
/// 监听指定键的配置变化
///
/// 配置值类型
/// 配置键
/// 配置变化时的回调,参数为新值
/// 取消注册接口
IUnRegister WatchConfig(string key, Action onChange);
///
/// 从 JSON 字符串加载配置
///
/// JSON 字符串
void LoadFromJson(string json);
///
/// 将配置保存为 JSON 字符串
///
/// JSON 字符串
string SaveToJson();
///
/// 从文件加载配置
///
/// 文件路径
void LoadFromFile(string path);
///
/// 将配置保存到文件
///
/// 文件路径
void SaveToFile(string path);
///
/// 获取所有配置键
///
/// 配置键集合
IEnumerable GetAllKeys();
}