using System;
using System.Collections.Generic;
using GFramework.Core.Abstractions.model;
namespace GFramework.Game.Abstractions.setting;
///
/// 定义设置模型的接口,提供获取特定类型设置节的功能
///
public interface ISettingsModel : IModel
{
///
/// 获取或创建数据设置(自动创建)
///
/// 设置数据的类型,必须继承自class、ISettingsData且具有无参构造函数
/// 指定类型的设置数据实例
T GetData() where T : class, ISettingsData, new();
///
/// 尝试获取指定类型的设置节实例
///
/// 要获取的设置节类型
/// 输出参数,如果成功则包含找到的设置节实例,否则为null
/// 如果找到指定类型的设置节则返回true,否则返回false
bool TryGet(Type type, out ISettingsSection section);
///
/// 获取已注册的可应用设置
///
/// 可应用设置的类型,必须继承自class和IApplyAbleSettings
/// 指定类型的可应用设置实例,如果不存在则返回null
T? GetApplicator() where T : class, IApplyAbleSettings;
///
/// 获取所有设置节的集合
///
/// 包含所有设置节的可枚举集合
IEnumerable All();
///
/// 注册可应用设置(必须手动注册)
///
/// 可应用设置的类型,必须继承自class和IApplyAbleSettings
/// 要注册的可应用设置实例
/// 返回当前设置模型实例,支持链式调用
ISettingsModel RegisterApplicator(T applicator) where T : class, IApplyAbleSettings;
}