#pragma once

#include <string>

class MarkdownElement
{
public:
    enum class Type
    {
        HEADING,
        PARAGRAPH,
        TEXT_SPAN,
        INLINE_QUOTE,
        MULTILINE_QUOTE,
        CUSTOM_INLINE,
        CUSTOM_MULTILINE,
        LINK,
        IMAGE,
        BULLET_ITEM,
        BULLET_LIST
    };

    virtual ~MarkdownElement() = default;

    void appendTextContent(const std::string& content);

    void addLine(const std::string& line);

    virtual std::string getTextContent() const;

    virtual Type getType() const = 0;

    virtual void doFieldSubstitution(Type, const std::string&, const std::string&)
    {

    }
private:
    std::string mTextContent;
};

class MarkdownInlineElement : public MarkdownElement
{
public:
    virtual ~MarkdownInlineElement() = default;
};

class MarkdownMultilineElement : public MarkdownElement
{
public:
    virtual ~MarkdownMultilineElement() = default;
};
