#include "ircconnection2.hpp"

namespace chatterino {
namespace providers {
namespace irc {

IrcConnection::IrcConnection(QObject *parent)
    : Communi::IrcConnection(parent)
{
    this->pingTimer_.setInterval(5000);
    this->pingTimer_.start();
    QObject::connect(&this->pingTimer_, &QTimer::timeout, [this] {
        if (!this->recentlyReceivedMessage_.load()) {
            this->sendRaw("PING");
            this->reconnectTimer_.start();
        }
        this->recentlyReceivedMessage_ = false;
    });

    this->reconnectTimer_.setInterval(5000);
    this->reconnectTimer_.setSingleShot(true);
    QObject::connect(&this->reconnectTimer_, &QTimer::timeout,
                     [this] { reconnectRequested.invoke(); });

    QObject::connect(this, &Communi::IrcConnection::messageReceived, [this](Communi::IrcMessage *) {
        this->recentlyReceivedMessage_ = true;

        if (this->reconnectTimer_.isActive()) {
            this->reconnectTimer_.stop();
        }
    });
}

}  // namespace irc
}  // namespace providers
}  // namespace chatterino
