#include <QListWidget>
#include <QKeyEvent>
#include <QAbstractScrollArea>
#include <QMessageBox>
#include <QLabel>
#include "messangerwidget.h"
#include "ui_messangerwidget.h"


MessangerWidget::MessangerWidget(QWidget *parent) :
    QWidget(parent),    
    tabDialogMessenger(nullptr),
    currGUIclientId(""),
    ui(new Ui::MessangerWidget)
{
    ui->setupUi(this);

    ui->tabWidget->removeTab(1);
    ui->tabWidget->removeTab(0);

    ui->btnSend->setObjectName("btnSend");
    ui->editMsg->setObjectName("editMsg");
}

MessangerWidget::~MessangerWidget()
{
    delete tabDialogMessenger;
    delete ui;
}

void MessangerWidget::initUserRemote(User user)
{
    userRemote = user;

    addTabDialogMessenger(userRemote);
}

void MessangerWidget::reinitMessangerWidget(User user)
{
    if(userRemote.getID() == user.getID())
    {
        userRemote = user;

        //Обновляем статус залогинивания
        updateLoggedIn(userRemote.getLoggedIn());
    }
}

void MessangerWidget::initGUIclientId(QString id_GUIclient)
{
    currGUIclientId = id_GUIclient;
}

int MessangerWidget::getIDuserRemote()
{
    return userRemote.getID();
}

void MessangerWidget::showSendedMessage(ClientMessage clientMessage)
{
    if(currGUIclientId == clientMessage.fromId)
        tabDialogMessenger->addMsgWidgetLocal(clientMessage.Text, clientMessage.timeStr);
}

void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
{
    if(QString::number(userRemote.getID()) == clientMessage.fromId)
        tabDialogMessenger->addMsgWidgetRemote(clientMessage.Text, clientMessage.timeStr);
}

void MessangerWidget::addTabDialogMessenger(User user)
{
    if(!tabDialogMessenger)
    {//Диалога еще не существует

        tabDialogMessenger = new TabDialogMessenger(user.getLogin(), QString::number(user.getID()), this);

        //Добавляем новую вкладку диалога
        QString typeUserStr = "";
        if(user.getTypeUserDB() == User::TypeUserDBTrainee)
            typeUserStr = tr("Trainee");
        else if(user.getTypeUserDB() == User::TypeUserDBInstructor)
            typeUserStr = tr("Instructor");
        int index = ui->tabWidget->addTab(tabDialogMessenger, typeUserStr + ": " + user.getName() + " (" + user.getLogin() + ")");

        //Обновляем статус залогинивания
        updateLoggedIn(user.getLoggedIn());
    }
    else
    {//Диалог уже существует

        //Проверяем наличие диалога с этим клиентом
        if(tabDialogMessenger->getUserLogin() == user.getLogin())
        {
            //Обновляем статус залогинивания
            updateLoggedIn(user.getLoggedIn());
        }
    }
}

void MessangerWidget::updateLoggedIn(bool loggedIn)
{
    //Обновляем статус залогинивания
    if(loggedIn)
        ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGreen.png"));
    else
        ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGray.png"));
}

void MessangerWidget::on_btnSend_clicked()
{
    QString text = ui->editMsg->toPlainText();
    QString from = currGUIclientId;
    QString to = QString::number(userRemote.getID());

    ClientMessage message = ClientMessage(from, to, text);
    emit signal_sendMessage(message);

    ui->editMsg->clear();
}

void MessangerWidget::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Return)
    {
        ui->btnSend->click();
    }
}

void MessangerWidget::changeEvent(QEvent *event)
{
    // В случае получения события изменения языка приложения
    if (event->type() == QEvent::LanguageChange)
    {
        ui->retranslateUi(this);    // переведём окно заново
    }
}
