using System.Reflection;
using System.Text.Json.Serialization;
namespace DysonNetwork.Sphere.Connection.WebReader;
/// 
/// The embeddable can be used in the post or messages' meta's embeds fields
/// To render a richer type of content.
///
/// A simple example of using link preview embed:
/// 
/// {
///     // ... post content
///     "meta": {
///         "embeds": [
///             {
///                 "type": "link",
///                 "title: "...",
///                 /// ...
///             }
///         ]
///     }
/// }
/// 
/// 
public abstract class EmbeddableBase
{
    public abstract string Type { get; }
    public Dictionary ToDictionary()
    {
        var dict = new Dictionary();
        foreach (var prop in GetType().GetProperties())
        {
            if (prop.GetCustomAttribute() is not null)
                continue;
            var value = prop.GetValue(this);
            if (value is null) continue;
            dict[prop.Name] = value;
        }
        return dict;
    }
}