#include "connectortoserver.h"

void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors)
{
    mtxAccess.lock();

    this->listInstructors = listInstructors;

    QList<User> listUsers;
    for(Instructor instructor : listInstructors)
    {
        listUsers.append(instructor);
    }

    mtxAccess.unlock();

    emit signal_UpdateDB(true, false);
    emit signal_reInitMessangerByUsers(listUsers);
}

void ConnectorToServer::slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups)
{
    mtxAccess.lock();
    this->listGroups = listGroups;
    mtxAccess.unlock();

    emit signal_UpdateDB(false, true);
}

void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTrainees)
{
    mtxAccess.lock();

    this->listTrainees = listTrainees;

    QList<User> listUsers;
    for(Trainee trainee : listTrainees)
    {
        listUsers.append(trainee);
    }

    mtxAccess.unlock();

    emit signal_UpdateDB(false, true);
    emit signal_reInitMessangerByUsers(listUsers);
}

void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList<Computer> listComputers)
{
    mtxAccess.lock();
    this->listComputers = listComputers;
    mtxAccess.unlock();

    //emit signal_UpdateDB(false, true); //TODO
}

void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms)
{
    mtxAccess.lock();
    this->listClassrooms = listClassrooms;
    mtxAccess.unlock();

    //emit signal_UpdateDB(false, true); //TODO
}

void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
{
    mtxAccess.lock();

    //Удаляем старые задачи этого обучаемого
    mapTasksAMM.remove(trainee_id);

    //Добавляем новые
    mapTasksAMM.insert(trainee_id, listTasks);

    mtxAccess.unlock();

    emit signal_UpdateTasksAMMforTrainee(trainee_id);
}

void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
{
    mtxAccess.lock();

    //Удаляем старые задачи этого обучаемого
    mapTasksFIM.remove(trainee_id);

    //Добавляем новые
    mapTasksFIM.insert(trainee_id, listTasks);

    mtxAccess.unlock();

    emit signal_UpdateTasksFIMforTrainee(trainee_id);
}

void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)
{
    mtxAccess.lock();
    this->listTaskFimArray = array;
    mtxAccess.unlock();

    emit signal_UpdateTasksFIM();
}

void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QByteArray array)
{
    mtxAccess.lock();
    this->listTaskAmmArray = array;
    mapSubProc.clear();//Очищаем подпроцедуры (уже не актуальны)
    mtxAccess.unlock();

    emit signal_UpdateTasksAMM();

    //Запрос старых оффлайн-сообщений
    if(!fl_GetedOfflineMessages)
    {
        sendClientNotify(cmd_GetOfflineMessages);
        fl_GetedOfflineMessages = true;
    }
}

void ConnectorToServer::slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode)
{
    mtxAccess.lock();

    //Удаляем старые Подпроцедуры этого dmCode
    mapSubProc.remove(parentTask_dmCode);

    //Добавляем новые
    mapSubProc.insert(parentTask_dmCode, listSubProc);

    mtxAccess.unlock();

    emit signal_UpdateSubProcForDMCode(parentTask_dmCode);
}

void ConnectorToServer::slot_AnswerDocsChanged()
{
    emit signal_AnswerDocsChanged();
}
