#include "importwidget.h"
#include "ui_importwidget.h"
#include "models/lotrodatmanager.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextEdit>
#include <QDebug>

ImportWidget::ImportWidget(LotroDatManager* mgr, QSettings* settings, QWidget *parent) :
    QWidget(parent), lotro_manager(mgr), settings(settings),
    ui(new Ui::ImportWidget)
{
    ui->setupUi(this);
    ui->database_import_radiobutton_common->click();
    connect(lotro_manager, &LotroDatManager::textFragmentReceived, this, &ImportWidget::onTextFragmentContentsReceived, Qt::QueuedConnection);
}

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

void ImportWidget::hideAllImportOptions()
{
    ui->file_import_widget->hide();
    ui->textfragment_import_widget->hide();
    ui->database_import_widget->hide();
}

void ImportWidget::onTextFragmentContentsReceived(QString args, QString content)
{
    ui->fragment_args_common->setText(args);
    ui->fragment_content_common->setText(content);
}

void ImportWidget::on_database_import_radiobutton_common_clicked()
{
    hideAllImportOptions();
    ui->database_import_widget->show();
}

void ImportWidget::on_file_import_radiobutton_common_clicked()
{
    hideAllImportOptions();
    ui->file_import_widget->show();
}

void ImportWidget::on_textfragment_import_radiobutton_common_clicked()
{
    hideAllImportOptions();
    ui->textfragment_import_widget->show();

}

void ImportWidget::on_database_import_button_common_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this->parentWidget(), "Открытие файла",
                               settings->value("advanced/import_path", "").toString(), "База данных (*.db);;Все файлы (*)");
    if (fileName.isEmpty())
            return;

    settings->setValue("advanced/import_path", fileName.left(std::max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'))));
    settings->sync();

    QMetaObject::invokeMethod(lotro_manager, "importFilesFromDatabase",
                              Qt::QueuedConnection, Q_ARG(QString, fileName));
}

void ImportWidget::on_file_import_button_common_clicked()
{
    if (ui->import_file_id_common->text().toLongLong() == 0) {
        QMessageBox::warning(this->parentWidget(), "Не указан ID импортируемого файла!", "Укажите, пожалуйста, корректный (числовой) ID импортируемого файла");
        return;
    }

    QString fileName = QFileDialog::getOpenFileName(this->parentWidget(), "Открытие файла",
                               settings->value("advanced/import_path", "").toString(), "Все файлы (*)");
    if (fileName.isEmpty())
            return;

    settings->setValue("advanced/import_path", fileName.left(std::max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'))));
    settings->sync();

    QMetaObject::invokeMethod(lotro_manager, "importFile", Qt::QueuedConnection,
                              Q_ARG(long long, ui->import_file_id_common->text().toLongLong()),
                              Q_ARG(QString, fileName)
                              );
}

void ImportWidget::on_get_file_fragments_button_common_clicked()
{
    if (ui->file_id_input_common->text().toLongLong() == 0) {
        QMessageBox::warning(this->parentWidget(), "Не указан ID импортируемого файла!", "Укажите, пожалуйста, корректный (числовой) ID импортируемого текстового файла!");
        return;
    }
    if (ui->fragment_id_input_common->text().toLongLong() == 0) {
        QMessageBox::warning(this->parentWidget(), "Не указан ID фрагмента!", "Укажите, пожалуйста, корректный (числовой) ID фрагмента!");
        return;
    }

    QMetaObject::invokeMethod(lotro_manager, "getTextFragment", Qt::QueuedConnection,
                              Q_ARG(long long, ui->file_id_input_common->text().toLongLong()),
                              Q_ARG(long long, ui->fragment_id_input_common->text().toLongLong())
                              );
}



void ImportWidget::on_textfragment_import_common_clicked()
{
    if (ui->file_id_input_common->text().toLongLong() == 0) {
        QMessageBox::warning(this->parentWidget(), "Не указан ID импортируемого файла!", "Укажите, пожалуйста, корректный (числовой) ID импортируемого текстового файла!");
        return;
    }
    if (ui->fragment_id_input_common->text().toLongLong() == 0) {
        QMessageBox::warning(this->parentWidget(), "Не указан ID фрагмента!", "Укажите, пожалуйста, корректный (числовой) ID фрагмента!");
        return;
    }

    QMetaObject::invokeMethod(lotro_manager, "importTextFragment", Qt::QueuedConnection,
                              Q_ARG(long long, ui->file_id_input_common->text().toLongLong()),
                              Q_ARG(long long, ui->fragment_id_input_common->text().toLongLong()),
                              Q_ARG(QString, ui->fragment_content_common->toPlainText()),
                              Q_ARG(QString, ui->fragment_args_common->text())
                              );
}
