namespace TakeoutSaaS.Module.Storage.Models;

/// <summary>
/// 直传（预签名上传）结果。
/// </summary>
public sealed class StorageDirectUploadResult
{
    /// <summary>
    /// 预签名上传地址（PUT 上传或表单地址）。
    /// </summary>
    public string UploadUrl { get; init; } = string.Empty;

    /// <summary>
    /// 直传附加字段（如表单直传所需字段），PUT 方式为空。
    /// </summary>
    public IReadOnlyDictionary<string, string> FormFields { get; init; } = new Dictionary<string, string>();

    /// <summary>
    /// 预签名过期时间。
    /// </summary>
    public DateTimeOffset ExpiresAt { get; init; }

    /// <summary>
    /// 关联的对象键。
    /// </summary>
    public string ObjectKey { get; init; } = string.Empty;

    /// <summary>
    /// 上传成功后可选的签名下载地址。
    /// </summary>
    public string? SignedDownloadUrl { get; init; }
}
