#include "yacreader_http_session.h"

YACReaderHttpSession::YACReaderHttpSession(QObject *parent)
    : QObject(parent), comicId(0), remoteComicId(0), comic(nullptr), remoteComic(nullptr)
{

}

YACReaderHttpSession::~YACReaderHttpSession()
{
    if(comic != nullptr)
        delete comic;

    if(remoteComic != nullptr)
        delete remoteComic;
}

bool YACReaderHttpSession::isComicOnDevice(const QString & hash)
{
    return comicsOnDevice.contains(hash);
}

bool YACReaderHttpSession::isComicDownloaded(const QString & hash)
{
    return downloadedComics.contains(hash);
}

void YACReaderHttpSession::setComicOnDevice(const QString & hash)
{
    comicsOnDevice.insert(hash);
}

void YACReaderHttpSession::setComicsOnDevice(const QSet<QString> & set)
{
    comicsOnDevice = set;
}

void YACReaderHttpSession::setDownloadedComic(const QString & hash)
{
    downloadedComics.insert(hash);
}

QSet<QString> YACReaderHttpSession::getComicsOnDevice()
{
    return comicsOnDevice ;
}

QSet<QString> YACReaderHttpSession::getDownloadedComics()
{
    return downloadedComics ;
}

void YACReaderHttpSession::clearComics()
{
    comicsOnDevice.clear();
    downloadedComics.clear();
}
//current comic (import)
qulonglong YACReaderHttpSession::getCurrentComicId()
{
    return comicId;
}

Comic* YACReaderHttpSession::getCurrentComic()
{
    return comic;
}

void YACReaderHttpSession::dismissCurrentComic()
{
    if(comic != nullptr)
    {
        comic->deleteLater();
        comic = nullptr;
    }
}

void YACReaderHttpSession::setCurrentComic(qulonglong id, Comic * comic)
{
    dismissCurrentComic();
    comicId = id;
    this->comic = comic;
}

//current comic (read)
qulonglong YACReaderHttpSession::getCurrentRemoteComicId()
{
    return remoteComicId ;
}

Comic* YACReaderHttpSession::getCurrentRemoteComic()
{
    return remoteComic ;
}

void YACReaderHttpSession::dismissCurrentRemoteComic()
{
    if(remoteComic != nullptr)
    {
        remoteComic->deleteLater();
        remoteComic = nullptr;
    }
}

void YACReaderHttpSession::setCurrentRemoteComic(qulonglong id, Comic * comic)
{
    dismissCurrentRemoteComic();
    remoteComicId = id;
    remoteComic = comic;
}

QString YACReaderHttpSession::getDeviceType()
{
    return device;
}

QString YACReaderHttpSession::getDisplayType()
{
    return display;
}

void YACReaderHttpSession::setDeviceType(const QString & device)
{
    //comicsOnDevice.clear(); //TODO crear un m�todo clear que limpie la sesi�n completamente
    //downloadedComics.clear();
    this->device = device;
}

void YACReaderHttpSession::setDisplayType(const QString & display)
{
    this->display = display;
}

void YACReaderHttpSession::clearNavigationPath()
{
    navigationPath.clear();
}

QPair<qulonglong, quint32> YACReaderHttpSession::popNavigationItem()
{
    if(navigationPath.isEmpty() == false)
        return navigationPath.pop();
    return QPair<qulonglong, quint32>();
}

QPair<qulonglong, quint32> YACReaderHttpSession::topNavigationItem()
{
    if(navigationPath.isEmpty() == false)
        return navigationPath.top();
    return QPair<qulonglong, quint32>();
}

void YACReaderHttpSession::pushNavigationItem(const QPair<qulonglong, quint32> &item)
{
    navigationPath.push(item);
}

void YACReaderHttpSession::updateTopItem(const QPair<qulonglong, quint32> &item)
{
     if(navigationPath.isEmpty() == false)
     {
        navigationPath.pop();
        navigationPath.push(item);
     }
     else
     {
         navigationPath.push(item);
     }
}

QStack<QPair<qulonglong, quint32> > YACReaderHttpSession::getNavigationPath()
{
    return navigationPath;
}