#include <QtTest/QtTest>
#include <QApplication>
#include <QTimer>
#include <QtCrypto>

#include "psipopup.h"
#include "iconset.h"
#include "psicon.h" // for PsiCon
#include "psiaccount.h" // for PsiAccount
#include "profiles.h" // for UserAccount
#include "im.h" // for Jid
#include "userlist.h" // for UserListItem
#include "mainwin.h"

class TestPsiPopup: public QObject
{
    Q_OBJECT
private:
    PsiCon *psi;
    PsiAccount *account;
    bool timeout;
    QCA::Initializer *qca_init;

    void delay(int msecs)
    {
        timeout = false;
        QTimer::singleShot(msecs, this, SLOT(timedOut()));
        while (!timeout)
            qApp->processEvents();
    }

protected slots:
    void timedOut()
    {
        timeout = true;
    }

private slots:
    void initTestCase()
    {
        // initialize the minimal amount of stuff necessary
        // to show PsiPopups on screen
//         is = new PsiIconset();
//         QVERIFY(is->loadAll());

        qca_init = new QCA::Initializer();
        QCA::keyStoreManager()->start();
        QCA::keyStoreManager()->waitForBusyFinished();

        psi = new PsiCon();
        psi->init();
        UserAccount userAccount;
        account = new PsiAccount(userAccount, psi);
    }

    void cleanupTestCase()
    {
        delete psi;
        QCA::unloadAllPlugins();
        delete qca_init;
    }

    void testPsiPopup()
    {
//         Q3MainWindow window;
//         window.show();
        delay(10000);

        option.ppHideTime = 10 * 1000; // 10 seconds
        option.ppBorderColor = Qt::blue;
        option.ppIsOn = true;

        PsiPopup *popup = new PsiPopup(PsiPopup::AlertChat, account);
        Jid jid("mblsha@jabber.ru");
        Resource resource("PowerBook");
        UserListItem userListItem;
        MessageEvent psiEvent(account);
        popup->setData(jid, resource, &userListItem, &psiEvent);

        delay(15000);
    }
};

QTEST_MAIN(TestPsiPopup)
#include "testpsipopup.moc"
