#ifndef PROVIDERDBLMS_H
#define PROVIDERDBLMS_H

#include <QObject>
#include <QDebug>
#include "interfacedatabaselms.h"
#include "tasksAmmFim.h"

class ProviderDBLMS : public QObject
{
    Q_OBJECT
public:
    explicit ProviderDBLMS(QWidget *parentWidget, QObject *parent = nullptr);
    ~ProviderDBLMS();
public:
    QString getMainInstructorName();

    //Авторизация обучаемого на клиенте
    bool authorizationTrainee(QString login, QString password, QString classroom_name = QStringLiteral(""), QString computer_name = QStringLiteral(""));
    bool deAuthorizationTrainee(QString login);
    QString getNameTraineeByLogin(QString login);

    //Авторизация инструктора на клиенте
    bool authorizationInstructor(QString login, QString password);
    bool deAuthorizationInstructor(QString login);
    QString getNameInstructorByLogin(QString login);

    //Общая деавторизация
    bool deAuthorizationAll();

    //Регистрация тайминга Обучаемого
    bool entryTraineeOnSimulator(int id_trainee);
    bool exitTraineeFromSimulator(int id_trainee);

    //
    int getIdTraineeByLogin(QString login);
    int getIdInstructorByLogin(QString login);
    QString getLoginTraineeById(int id_trainee);

    QList<Instructor> GetListAllInstructors();    
    QList<Trainee> GetListAllTrainees();
    QList<Group> GetListAllGroups();

    int newInstructor();
    int delInstructor(int id);
    int editInstructor(Instructor instructor);

    int newTrainee(int id_group);
    int delTrainee(int id);
    int editTrainee(Trainee trainee);

    int newGroup();
    int delGroup(int id);
    int editGroup(Group group);

    int newTaskAMM(TaskAmmFim task, int id_trainee);
    int delTaskAMM(int id);
    int editTaskAMM(TaskAmmFim task);

    int newTaskFIM(TaskAmmFim task, int id_trainee);
    int delTaskFIM(int id);
    int editTaskFIM(TaskAmmFim task);
    int replaceReportFIM(TaskAmmFim task);
    int changeStatusTaskFIM(int id_task, QString status);
    int changeStatusTaskAMM(int id_task, QString status);

    QList<TaskAmmFim> GetListTasksAMMofTrainee(int id_trainee);
    QList<TaskAmmFim> GetListTasksFIMofTrainee(int id_trainee);

    TaskAmmFim getTaskAMMbyID(int id_task);
    TaskAmmFim getTaskFIMbyID(int id_task);

Q_SIGNALS:
    //сигнал о блокировке авторизации
    void signal_BlockAutorization(bool block);
signals:
    void signal_ErrorPostgreSQL(QString text);

public:
    bool ConnectionToDB();
    void DisConnectionFromDB();
    bool DBisConnected();
    DataBaseSettings getDBSettings();

    //PostgreSQL
    bool setUserPasswordPostgres(QString userName, QString password);
    bool checkDriverQPSQLavailable();
    bool checkUserLMSexist();
    bool checkDataBaseLMSexist();

    bool createUser();
    bool createDB();

private:
    InterfaceDataBaseLMS* dbLMS;
    QMutex mtxAccess;
    QWidget *parentWidget;
};

#endif // PROVIDERDBLMS_H
