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

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

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"
