#include <string>
#include <dpp/dpp.h>
#include <dpp/channel.h>
#include <dpp/unicode_emoji.h>

#include "utils.hpp"
#include "config.h"

int main(int ac, char **av)
{
    dpp::cluster bot(ac == 2 ? av[1] : BOT_TOKEN, dpp::i_default_intents | dpp::i_message_content);

    bot.on_log(dpp::utility::cout_logger());

    bot.on_message_create([&bot](const dpp::message_create_t& event)
    {
        if (event.msg.author.id == bot.me.id)
        {
            bot.message_add_reaction(event.msg, dpp::unicode_emoji::white_check_mark);
        }
        else
        {
            dpp::channel channel = bot.channel_get_sync(event.msg.channel_id);
            dpp::channel category = bot.channel_get_sync(channel.parent_id);


            if (category.is_category() == false || category.name != GROCERY_LIST_CATEGORY)
                return;

            dpp::embed embed = dpp::embed()
                .set_color(dpp::colors::sea_green)
                .set_title(event.msg.content)
                .set_author(event.msg.author.username, "", "")
                .set_footer(dpp::embed_footer().set_text("PyMenuVersion:2.0"));
            
            std::string str = event.msg.content;

            unsigned int quantity;
            float price;

            get_article_data(str, quantity, price);

            if (quantity != 0)
                embed.add_field("Quantity", std::to_string(quantity));

            if (price != 0)
                embed.add_field("Price", std::to_string(price) + "€");

            embed.set_title(str);

            dpp::message msg(event.msg.channel_id, embed);
            event.send(msg);

            bot.message_delete(event.msg.id, event.msg.channel_id);
        }
    });

    bot.on_message_reaction_add([&bot](const dpp::message_reaction_add_t& event)
    {
        dpp::channel channel = bot.channel_get_sync(event.channel_id);
        dpp::channel category = bot.channel_get_sync(channel.parent_id);

        if (category.is_category() == false || category.name != GROCERY_LIST_CATEGORY)
            return;

        if (event.reacting_user.id == bot.me.id)
            return;
        dpp::emoji emoji = event.reacting_emoji;
        if (emoji.name == dpp::unicode_emoji::white_check_mark)
            bot.message_delete(event.message_id, event.channel_id);
    });

    bot.on_ready([&bot](const dpp::ready_t& event)
    {
        std::cout << bot.me.id << std::endl;
        (void) event;
    });

    bot.start(dpp::st_wait);
}