#include "backupappfinder.h"
#include <QTreeWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QDir>
#include <QFileInfo>
#include <QHeaderView>
#include <QDateTime>
#include <QCloseEvent>

const char backupdir[32] = "last";

BackupAppFinder::BackupAppFinder(QWidget *parent) : QDialog(parent)
{
    setCursor(Qt::ArrowCursor);
    QGridLayout *lo = new QGridLayout(this);
    QTreeWidget *tw = new QTreeWidget(this);
    QPushButton *pb = new QPushButton("Start", this);
    QLabel *lab = new QLabel("Double click an item or select one and click \"Start\"", this);
    tw->setColumnCount(2);
    tw->setHeaderLabels(QStringList() << "Backup application" << "Created on");
    tw->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
    connect(pb, SIGNAL(clicked()), this, SLOT(accept()));
    pb->setDisabled(true);

    lo->addWidget(tw, 0, 0, 4, 6);
    lo->addWidget(pb, 4, 5, 1, 1);
    lo->addWidget(lab, 4, 0, 1, 5);

    connect(tw, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected()));
    connect(tw, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(accept()));
}

QString BackupAppFinder::exename() const
{
    return m_exename;
}

QString BackupAppFinder::exe_path() const
{
    QString epa(m_exe_path);
    if(!epa.endsWith('/'))
        epa += "/";
    return epa;
}

void BackupAppFinder::exec(const QString &exenam, const QString &envpath)
{
    QTreeWidget *tw  = findChild<QTreeWidget *>();
    tw->clear();
    QString bkdir;
    envpath.endsWith('/') ? bkdir = envpath + QString(backupdir) : bkdir = envpath + "/" + QString(backupdir);
    if(!bkdir.endsWith('/'))
        bkdir += "/";
    QDir backupDir(bkdir);
    QFileInfoList fil;
    if(backupDir.exists()) {
        QString filter = exenam + "+*";
        fil = backupDir.entryInfoList(QStringList() << filter, QDir::Executable|QDir::Files, QDir::Time);
        foreach (QFileInfo fi, fil) {
            QTreeWidgetItem *it = new QTreeWidgetItem(tw, QStringList() << fi.fileName() << fi.created().toString());
            it->setData(0, Qt::UserRole, bkdir);
        }
    }
    QDialog::exec();
}

void BackupAppFinder::closeEvent(QCloseEvent *e)
{
    hide();
    e->ignore();
}

void BackupAppFinder::itemSelected()
{
    findChild<QPushButton *>()->setEnabled(true);
}

void BackupAppFinder::accept()
{
    QTreeWidget *tw = findChild<QTreeWidget *>();
    QList<QTreeWidgetItem*> selected = tw->selectedItems();
    if(selected.size() == 1) {
        m_exename =  selected.first()->text(0);
        m_exe_path = selected.first()->data(0, Qt::UserRole).toString();
    }
    hide();
}