namespace TakeoutSaaS.Infrastructure.Common.Options;

/// <summary>
/// 数据源配置集合，键为逻辑数据源名称。
/// </summary>
public sealed class DatabaseOptions
{
    /// <summary>
    /// 配置节名称。
    /// </summary>
    public const string SectionName = "Database";

    /// <summary>
    /// 数据源配置字典，键为数据源名称。
    /// </summary>
    public IDictionary<string, DatabaseDataSourceOptions> DataSources { get; init; } =
        new Dictionary<string, DatabaseDataSourceOptions>(StringComparer.OrdinalIgnoreCase);

    /// <summary>
    /// 获取指定名称的数据源配置，不存在时返回 null。
    /// </summary>
    /// <param name="name">逻辑数据源名称。</param>
    /// <returns>数据源配置或 null。</returns>
    public DatabaseDataSourceOptions? Find(string name)
    {
        if (string.IsNullOrWhiteSpace(name))
        {
            return null;
        }

        return DataSources.TryGetValue(name, out var options) ? options : null;
    }
}
