#include "UBTeacherBarDataMgr.h"

#include "core/UBApplication.h"
#include "core/UBPersistenceManager.h"

#include "board/UBBoardController.h"

#include "customWidgets/UBGlobals.h"

#include "adaptors/UBMetadataDcSubsetAdaptor.h"


UBTeacherBarDataMgr::UBTeacherBarDataMgr()
{

}

UBTeacherBarDataMgr::~UBTeacherBarDataMgr()
{

}

void UBTeacherBarDataMgr::clearLists()
{
    mActionList.clear();
    mUrlList.clear();
    mMediaList.clear();
    mMediaUrls.clear();
}

void UBTeacherBarDataMgr::saveContent()
{
    // Store the page information in the UBZ
    sTeacherBarInfos infos;

    // Page Title
    infos.title = mPageTitle;
    // Actions
    foreach(sAction action, mActionList){
        infos.actions << QString("%0;%1").arg(action.type).arg(action.content);
    }
    // Media
    foreach(QString media, mMediaUrls){
        infos.medias << media;
    }
    // Links
    foreach(sLink link, mUrlList){
        if("" != link.title && "" != link.link){
            infos.urls << QString("%0;%1").arg(link.title).arg(link.link);
        }
    }
    // Comments
    infos.comments = mComments;

    UBDocumentProxy* documentProxy = UBApplication::boardController->activeDocument();
    if(documentProxy){
        UBPersistenceManager::persistenceManager()->persistTeacherBar(documentProxy, UBApplication::boardController->activeSceneIndex(), infos);

        documentProxy->setSessionTitle(mSessionTitle);
        documentProxy->setSessionTarget(mSessionTarget);
        documentProxy->setSessionLicence(QString("%0").arg(mSessionLicence));
        documentProxy->setSessionKeywords(mAuthors);
        documentProxy->setSessionLevel(mLevel);
        documentProxy->setSessionTopic(mTopic);
        documentProxy->setSessionAuthor(mAuthors);

        UBMetadataDcSubsetAdaptor::persist(documentProxy);
    }
}



void UBTeacherBarDataMgr::loadContent(bool docChanged)
{
    clearLists();
    UBDocumentProxy* documentProxy = UBApplication::boardController->activeDocument();

    sTeacherBarInfos nextInfos = UBPersistenceManager::persistenceManager()->getTeacherBarInfos(documentProxy, UBApplication::boardController->activeSceneIndex());
    if(true/*docChanged*/){
        mSessionTitle = documentProxy->sessionTitle();
        mSessionTarget = documentProxy->sessionTarget();
        mSessionLicence = (eLicense)documentProxy->sessionLicence().toInt();
        mKeywords = documentProxy->sessionKeywords();
        mLevel = documentProxy->sessionLevel();
        mTopic = documentProxy->sessionTopic();
        mAuthors = documentProxy->sessionAuthors();
    }

    // Page Title
    mPageTitle = nextInfos.title;
    // Actions
    foreach(QString eachAction, nextInfos.actions){
        QStringList qslAction = eachAction.split(";");
        if(2 <= qslAction.size()){
            sAction action;
            action.type = qslAction.at(0).toInt();
            action.content = qslAction.at(1);
            mActionList << action;
        }
    }
    // Media URL
    if((nextInfos.medias.size() == 1) && (nextInfos.medias.at(0) == "")){
        // Do not retrieve it
    }
    else{
        mMediaUrls = nextInfos.medias;
    }

    // Links
    foreach(QString eachUrl, nextInfos.urls){
        QStringList qslUrl = eachUrl.split(';');
        if(2 <= qslUrl.size()){
            sLink link;
            link.title = qslUrl.at(0);
            link.link = qslUrl.at(1);
            mUrlList << link;
        }
    }

    // Comments
    mComments = nextInfos.comments;
}

// ------------------------------------------------------------------------------------
UBTBSeparator::UBTBSeparator(QWidget *parent, const char *name):QFrame(parent)
{
    setObjectName("UBTBSeparator");
    setMinimumHeight(5);
    setMaximumHeight(5);
}

UBTBSeparator::~UBTBSeparator()
{

}

// ------------------------------------------------------------------------------------
UBTBLicenseWidget::UBTBLicenseWidget(QWidget *parent, const char *name):QWidget(parent)
{
    setObjectName(name);
    setLayout(&mLayout);

    mpIcon = new QLabel(this);
    mpText = new QLabel(this);
    mpText->setWordWrap(true);
    mLayout.addWidget(mpIcon);
    mLayout.addWidget(mpText);
}

UBTBLicenseWidget::~UBTBLicenseWidget()
{
    DELETEPTR(mpIcon);
    DELETEPTR(mpText);
}

void UBTBLicenseWidget::setLicense(eLicense lic)
{
    switch(lic){
        case eLicense_CCBY:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccby.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY"));
            break;
        case eLicense_CCBYND:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccbynd.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY-ND"));
            break;
        case eLicense_CCBYNCSA:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccbyncsa.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY-NC-SA"));
            break;
        case eLicense_CCBYSA:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccbysa.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY-SA"));
            break;
        case eLicense_CCBYNC:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccbync.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY-NC"));
            break;
        case eLicense_CCBYNCND:
            mpIcon->setPixmap(QPixmap(":images/licenses/ccbyncnd.png"));
            mpText->setText(tr("Creative Common License %0").arg("CC BY-NC-ND"));
            break;
    }
}