using NodaTime;
namespace DysonNetwork.Shared.Models;
/// 
/// Common interface for cloud file entities that can be used in file operations.
/// This interface exposes the essential properties needed for file operations
/// and is implemented by both CloudFile and CloudFileReferenceObject.
/// 
public interface ICloudFile
{
    public Instant CreatedAt { get; }
    public Instant UpdatedAt { get; }
    public Instant? DeletedAt { get; }
    
    /// 
    /// Gets the unique identifier of the cloud file.
    /// 
    string Id { get; }
    /// 
    /// Gets the name of the cloud file.
    /// 
    string Name { get; }
    /// 
    /// Gets the file metadata dictionary.
    /// 
    Dictionary FileMeta { get; }
    /// 
    /// Gets the user metadata dictionary.
    /// 
    Dictionary? UserMeta { get; }
    /// 
    /// Gets the MIME type of the file.
    /// 
    string? MimeType { get; }
    /// 
    /// Gets the hash of the file content.
    /// 
    string? Hash { get; }
    /// 
    /// Gets the size of the file in bytes.
    /// 
    long Size { get; }
    /// 
    /// Gets whether the file has a compressed version available.
    /// 
    bool HasCompression { get; }
}