#include "lrimageitemeditor.h"
#include "ui_lrimageitemeditor.h"

#include "lrimageitem.h"

#include <QFileDialog>
#include <QFileInfo>

ImageItemEditor::ImageItemEditor(LimeReport::IEditableImageItem* item, QWidget* parent):
    QWidget(parent),
    ui(new Ui::ImageItemEditor),
    m_item(item)
{
    ui->setupUi(this);
    m_image = item->imageAsByteArray();
    ui->resourcePath->setText(m_item->resourcePath());
    updateImage();
}

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

void ImageItemEditor::updateImage()
{
    QPixmap image;
    if (m_image.isEmpty() && !ui->resourcePath->text().isEmpty()) {
        image.load(ui->resourcePath->text());
    } else {
        image.loadFromData(m_image);
    }
    ui->imageViewer->setPixmap(image);
}

void ImageItemEditor::on_tbLoadImage_clicked()
{
    QString fileName
        = QFileDialog::getOpenFileName(this, tr("Select image file"), "", m_item->fileFilter());
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly)) {
        m_image = file.readAll();
    }
    updateImage();
}

void ImageItemEditor::on_tbClearImage_clicked()
{
    m_image.clear();
    updateImage();
}

void ImageItemEditor::on_buttonBox_accepted()
{
    QImage image;
    m_item->setImageAsByteArray(m_image);
    m_item->setResourcePath(ui->resourcePath->text());
    this->close();
}

void ImageItemEditor::on_buttonBox_rejected() { this->close(); }

void ImageItemEditor::on_toolButton_clicked()
{
    ui->resourcePath->setText(QFileDialog::getOpenFileName(this, tr("Select image file")));
    m_resourcePathImage = QPixmap(ui->resourcePath->text());
    if (!m_resourcePathImage.isNull() && m_image.isNull())
        ui->imageViewer->setPixmap(m_resourcePathImage);
}

void ImageItemEditor::on_tbResourcePath_clicked()
{
    ui->resourcePath->setText("");
    updateImage();
}