#ifndef PROCESSINGSYSTEM_H
#define PROCESSINGSYSTEM_H

#include <Systems/sendsystem.h>
#include <Data/typesDataServerClient.h>

#include <clienthandler.h>
#include <serverlmswidget.h>
//#include "instructorsandtraineeswidget.h"
#include "providerdblms.h"

class SendSystem;
class ServerLMSWidget;
class InstructorsAndTrainees;
class Logger;
class DataParser;
class ClientHandler;
class CommonClientHandler;

class ProcessingSystem : public QObject
{
    Q_OBJECT
public:
    explicit ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateController* updateController, QObject *parent = nullptr);

    void initialize(ServerLMSWidget *server,
                    DataParser* dataParser,
                    CommonClientHandler *commonClientServer,
                    Logger *logger,
                    UpdateController *updateComtroller);

    void processingClientAutorization(ClientHandler *client, ClientAutorization clientAutorization);
    void processingClientDeAutorization(ClientHandler *client, ClientDeAutorization clientDeAutorization);
    void processingClientQueryToDB(ClientHandler *client, ClientQueryToDB clientQueryToDB, int id = 0, void* data = nullptr);
    void processingClientQueryTasksXML(ClientHandler *client, ClientQueryTasksXML clientQueryTasksXML);
    void processingToClientMessage(ClientHandler *client, ToClientMessage toClientMessage);

    void processingFromClientMessage(ClientHandler *client, ClientMessage clientMessage);
    void processingClientNotify(ClientHandler *client, ClientNotify clientNotify);

    void setCurrentDataInfo(DataInfo *dataInfo);
signals:
    void sigUpdateListClients();
    void sigAuthChanged();
    void sigLogMessage(QString log);
    void sigAddToMessanger(QString login,QString text);
    void signal_msgToClientReady(QString login, QString text);
    void signal_msgFromClientReady(QString login, QString text);
    void sigSetData(DataInfo *dataInfo);

private:
    CommonClientHandler *commonClientServer;
    ServerLMSWidget *server;
    DataParser *dataParser;
    UpdateController *updateController;
    ProviderDBLMS* providerDBLMS;
};

#endif // PROCESSINGSYSTEM_H
