#include "messages/search/BadgePredicate.hpp"

#include "messages/Message.hpp"
#include "providers/twitch/TwitchBadge.hpp"
#include "util/Qt.hpp"

namespace chatterino {

BadgePredicate::BadgePredicate(const QString &badges, bool negate)
    : MessagePredicate(negate)
{
    // Check if any comma-seperated values were passed and transform those
    for (const auto &badge : badges.split(',', Qt::SkipEmptyParts))
    {
        // convert short form name of certain badges to formal name
        if (badge.compare("mod", Qt::CaseInsensitive) == 0)
        {
            this->badges_ << "moderator";
        }
        else if (badge.compare("sub", Qt::CaseInsensitive) == 0)
        {
            this->badges_ << "subscriber";
        }
        else if (badge.compare("prime", Qt::CaseInsensitive) == 0)
        {
            this->badges_ << "premium";
        }
        else
        {
            this->badges_ << badge;
        }
    }
}

bool BadgePredicate::appliesToImpl(const Message &message)
{
    for (const Badge &badge : message.badges)
    {
        if (badges_.contains(badge.key_, Qt::CaseInsensitive))
        {
            return true;
        }
    }

    return false;
}

}  // namespace chatterino
