using aeqw89.DataKeys;

namespace Beam.Abstractions;

public interface IDocument {
    /// <summary>
    /// The file name of the document. Must be valid in both <c>UNIX</c>, 
    /// <c>WINDOWS</c>, <c>APPLE</c>, and <c>ANDROID</c> file systems.
    /// </summary>
    string Filename { get; }

    /// <summary>
    /// Additional descriptive data
    /// </summary>
    IDictionary<IDataKey<IDocumentMetaData>, IDocumentMetaData> MetaData { get; }

    /// <summary>
    /// Retrieves the binary representation for the <see cref="IDocument"/>
    /// </summary>
    /// <returns>Binary representation of the <see cref="IDocument"/></returns>
    byte[] ToBytes();

    /// <summary>
    /// Retrieves the string representation for the <see cref="IDocument"/>
    /// </summary>
    /// <returns>String representation of the <see cref="IDocument"/></returns>
    string ToString();
}