using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Module.Storage.Options;

/// <summary>
/// 存储模块的统一配置项，决定默认提供商与全局安全策略。
/// </summary>
public sealed class StorageOptions
{
    /// <summary>
    /// 默认使用的存储提供商。
    /// </summary>
    public StorageProviderKind Provider { get; set; } = StorageProviderKind.TencentCos;

    /// <summary>
    /// CDN 访问域名（可选），若配置则优先使用 CDN 域名生成访问地址。
    /// </summary>
    [Url]
    public string? CdnBaseUrl { get; set; }

    /// <summary>
    /// 腾讯云 COS 配置。
    /// </summary>
    [Required]
    public TencentCosOptions TencentCos { get; set; } = new();

    /// <summary>
    /// 七牛云 Kodo 配置。
    /// </summary>
    [Required]
    public QiniuKodoOptions QiniuKodo { get; set; } = new();

    /// <summary>
    /// 阿里云 OSS 配置。
    /// </summary>
    [Required]
    public AliyunOssOptions AliyunOss { get; set; } = new();

    /// <summary>
    /// 存储安全策略配置。
    /// </summary>
    [Required]
    public StorageSecurityOptions Security { get; set; } = new();
}
