#include "MainWindow.hpp"
#include "tmp/ui_MainWindow.h"
#include <QTime>
#include <QDebug>
MainWindow::MainWindow( QWidget *parent) :
    QMainWindow( parent, Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint),
    _ui( new Ui::MainWindow)
{
    _ui->setupUi( this);
    _connectCount = 0;
    doUpdateView();
    _timer1s.start(1000);
    connect( &_timer1s, SIGNAL(timeout()), this, SLOT(doTimeUpdate()));
    _server->start(0);  
    _discoverRemote->setService("Demo Chat Server");
    _discoverRemote->addGroup("arndemo/chat");
    _discoverRemote->addCustomProperty("ChatProtoVer", "1.0");
    _discoverRemote->startUseServer( _server);
    _arnTime.open("//Chat/Time/value");
    _commonSapi = new ChatSapi( this);
    _commonSapi->open("//Chat/Pipes/pipeCommon", SMode::Provider | SMode::UseDefaultCall);
    _commonSapi->batchConnectTo( this, "sapi");
    connect( arnPipes, SIGNAL(arnItemCreated(QString)), this, SLOT(doNewSession(QString)));
}
MainWindow::~MainWindow()
{
    delete _ui;
}
void  MainWindow::doNewSession( QString path)
{
    ChatSapi*  soleSapi = new ChatSapi( this);
    soleSapi->open( path, SMode::Provider | SMode::UseDefaultCall);
    soleSapi->batchConnectTo( this, "sapi");
    connect( soleSapi, SIGNAL(pipeClosed()), soleSapi, SLOT(deleteLater()));
    
    connect( soleSapi, SIGNAL(pipeClosed()), this, SLOT(doSessionClosed()));    
    ++_connectCount;
    doUpdateView();
}
void MainWindow::doSessionClosed()
{
    --_connectCount;
    doUpdateView();
}
void  MainWindow::doUpdateView()
{
    _ui->connectCount->setText( QString::number( _connectCount));
}
void  MainWindow::on_shutDownButton_clicked()
{
    qWarning() << "About to shut down.";
    delete _discoverRemote;  
    _discoverRemote = 0;
    QApplication::quit();
}
void  MainWindow::doTimeUpdate()
{
    _arnTime = QTime::currentTime().toString();
}
void  MainWindow::sapiList()
{
    ChatSapi*  sapi = qobject_cast<ChatSapi*>( sender());
    Q_ASSERT(sapi);
    for (int i = 0; i < _chatNameList.size(); ++i) {
        sapi->rq_updateMsg( i, _chatNameList.at(i), _chatMsgList.at(i));
    }
}
void  MainWindow::sapiNewMsg( QString name, QString msg)
{
    _chatNameList += name;
    _chatMsgList  += msg;
    int  seq = _chatNameList.size() - 1;
    _commonSapi->rq_updateMsg( seq, name, msg);
}
void  MainWindow::sapiInfoQ()
{
    ChatSapi*  sapi = qobject_cast<ChatSapi*>( sender());
    Q_ASSERT(sapi);
    sapi->rq_info("Arn Chat Demo", "1.2");
}
void  MainWindow::sapiDefault( const QByteArray& data)
{
    ChatSapi*  sapi = qobject_cast<ChatSapi*>( sender());
    Q_ASSERT(sapi);
    qDebug() << "chatDefault:" << data;
    sapi->sendText("Chat Sapi: Can't find method, use $help.");
}