#ifndef RECOGNIZESYSTEM_H
#define RECOGNIZESYSTEM_H

#include <QObject>
#include <QDataStream>
#include <QTcpSocket>
#include <mainwindow.h>
#include <Core\tools.h>
#include <Core\UpdateController.h>

class UpdateController;
class MainWindow;
class HashComparer;
class TCPClient;
class ServerAuthorization;

class RecognizeSystem : public QObject
{

    Q_OBJECT

public:
    explicit RecognizeSystem(QObject *parent = 0);
    ~RecognizeSystem();
    void initialize(UpdateController* updateController,
                    DataParser *dataParser,
                    MainWindow *mainWindow,
                    HashComparer *hashComparer,
                    TCPClient *client);

    void recognize(QTcpSocket *socket);
    void checkAccessType(QString type);
    void setServerVersion(StreamingVersionData *serverVersion);
    void showServerDataList(QList<StreamingVersionData*> *showServerDataList);

signals:
    void sigUpdateBytesAvailable();
    void sigLoadComplete();
    void sigNeedUpdate(bool flag,qint64 size,quint64 fileCount);
    void sigSendDebugLog(QString message);
    void sigSocketDisabled();
    void sigServerBlocked();
    void sigSaveLoginData(ServerAuthorization *serverAuth);
    void sigSocketWaitForReadyRead(int waitTime);
    void sigStartCompare();
    void sigShowServerList(QList<StreamingVersionData*> *serverDatas);

private:
    QList<QString> *folderList;
    MainWindow *mainWindow;
    UpdateController *updateController;
    DataParser *dataParser;
    PacketType packetType;
    QString message;
    QString filePath;
    QByteArray tmpBlock;

    qint64 sizeReceiveData;
    qint64 fileSize;
    int countSend;
};

#endif // RECOGNIZESYSTEM_H
