using System.Text;
using aeqw89.DataKeys;
using Beam.Abstractions;

namespace Beam.Models {
    public abstract class Document(string filename, Encoding? encoding = null) : IDocument {
        public string Filename { get; set; } = filename;
        public Encoding Encoding { get; set; } = encoding ?? Encoding.UTF8;
        public Dictionary<DataKey<IDocumentMetaData>, IDocumentMetaData> MetaData { get; set; } = [];
        IDictionary<IDataKey<IDocumentMetaData>, IDocumentMetaData> IDocument.MetaData 
            => MetaData.ToDictionary(IDataKey<IDocumentMetaData> (x) => x.Key, x => x.Value);

        public abstract byte[] ToBytes();
        public abstract override string ToString();
    }
}
