#ifndef EMOJIS_H
#define EMOJIS_H

#include "concurrentmap.h"
#include "messages/lazyloadedimage.h"

#include <QObject>
#include <QRegularExpression>
#include <QString>
#include <unordered_map>

namespace chatterino {

class Emojis
{
public:
    static void parseEmojis(std::vector<std::tuple<messages::LazyLoadedImage *, QString>> &vector,
                            const QString &text);

    static void loadEmojis();

    static QString replaceShortCodes(const QString &text);

    struct EmojiData {
        QString value;
        QString code;
    };

private:
    static QRegularExpression findShortCodesRegex;

    static QMap<QString, EmojiData> shortCodeToEmoji;
    static QMap<QString, QString> emojiToShortCode;
    static QMap<QChar, QMap<QString, QString>> firstEmojiChars;

    static ConcurrentMap<QString, messages::LazyLoadedImage *> imageCache;

    Emojis()
    {
    }
};
}

#endif  // EMOJIS_H