#include <QListWidget>
#include <QBrush>
#include <QKeyEvent>
#include "messangerwidget.h"
#include "ui_messangerwidget.h"

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

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

    ui->tabWidget->setStyleSheet("QTabBar::tab:selected "
                                 "{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);"
                                 "color: #ffffff;}");
}

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

void MessangerWidget::addMsg(QString login, QString name, QString text, MessangerWidget::ETypeMsg typeMsg)
{
    addDialogTab(login, name);

    QString prefix = (typeMsg == MessangerWidget::ETypeMsg::fromClient)? ">> " : "<< ";

    //Ищем нужный диалог
    foreach(DialogMsg dialogMsg, listDialogMsg)
    {
        if(dialogMsg.getLogin() == login)
        {
            //Добавляем в существующую вкладку
            ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());

            QListWidgetItem* item = new QListWidgetItem(QIcon(":/icons/trainee.png"), prefix + text);
            item->setBackground(QBrush(QColor(200, 200, 255)));
            dialogMsg.getListWidget()->addItem(item);

            currLogin = login;
            return;
        }
    }
}

void MessangerWidget::addDialogTab(QString login, QString name)
{
    if(listDialogMsg.count() == 0)
    {
        currLogin = login;
        emit signal_tabMessengerChanged(currLogin);
    }

    //Проверяем наличие диалога с этим клиентом
    foreach(DialogMsg dialogMsg, listDialogMsg)
    {
        if(dialogMsg.getLogin() == login)
        {//Диалог для этого клиента уже существует
            return;
        }
    }

    //Добавляем новую вкладку диалога
    QListWidget* listWidget = new QListWidget();
    int index = ui->tabWidget->addTab(listWidget, /*login + ": " +*/ name);

    //Помещаем новый диалог в список диалогов
    DialogMsg dialogMsg(index, listWidget, login);
    listDialogMsg.append(dialogMsg);
}

void MessangerWidget::on_btnSend_clicked()
{
    QString text = ui->editMsg->text();

    emit signal_msgToClientReady(currLogin, text);

    ui->editMsg->clear();

    QString prefix = "<< ";

    //Ищем нужный диалог
    foreach(DialogMsg dialogMsg, listDialogMsg)
    {
        if(dialogMsg.getLogin() == currLogin)
        {
            //Добавляем в существующую вкладку
            ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());

            QListWidgetItem* item = new QListWidgetItem(QIcon(":/icons/instructor.png"), prefix + text);
            item->setBackground(QBrush(QColor(200, 255, 200)));
            dialogMsg.getListWidget()->addItem(item);

            return;
        }
    }
}

void MessangerWidget::on_tabWidget_currentChanged(int index)
{
    //Ищем нужный диалог
    foreach(DialogMsg dialogMsg, listDialogMsg)
    {
        if(dialogMsg.getIndexTab() == index)
        {
            currLogin = dialogMsg.getLogin();
            emit signal_tabMessengerChanged(currLogin);
            return;
        }
    }
}

void MessangerWidget::slot_traineeSelected(QString login)
{
    //Ищем нужный диалог
    foreach(DialogMsg dialogMsg, listDialogMsg)
    {
        if(dialogMsg.getLogin() == login)
        {
            //Активируем нужную вкладку
            ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());
            return;
        }
    }
}

void MessangerWidget::slot_LanguageChanged(QString language)
{
    qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
    qApp->installTranslator(&qtLanguageTranslator);
}

void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
{
    for(Trainee trainee: listTrainees)
    {
        if(! trainee.getArchived())
            this->addDialogTab(trainee.getLogin(), trainee.getName());
    }
}

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

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

