using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Infrastructure.Common.Options;

/// <summary>
/// 单个数据源的连接配置，支持主写与多个从读。
/// </summary>
public sealed class DatabaseDataSourceOptions
{
    /// <summary>
    /// 主写连接串，读写分离缺省回退到此连接。
    /// </summary>
    [Required]
    public string? Write { get; set; }

    /// <summary>
    /// 从读连接串集合，可为空。
    /// </summary>
    public IList<string> Reads { get; init; } = new List<string>();

    /// <summary>
    /// 默认命令超时（秒），未设置时使用框架默认值。
    /// </summary>
    [Range(1, 600)]
    public int CommandTimeoutSeconds { get; set; } = 30;

    /// <summary>
    /// 数据库重试次数。
    /// </summary>
    [Range(0, 10)]
    public int MaxRetryCount { get; set; } = 3;

    /// <summary>
    /// 数据库重试最大延迟（秒）。
    /// </summary>
    [Range(1, 60)]
    public int MaxRetryDelaySeconds { get; set; } = 5;
}
