#include "projectsettings.h"
#include <QFormLayout>
#include <QDialogButtonBox>
#include <QPushButton>
#include <iostream>

ProjectSettings::ProjectSettings(QWidget *parent) : QDialog(parent) {
    QDialogButtonBox* bb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);

    QPushButton* okBtn = bb->button(QDialogButtonBox::Ok);
    okBtn->setAutoDefault(true);
    okBtn->setDefault(true);
    connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));

    QPushButton* cancelBtn = bb->button(QDialogButtonBox::Cancel);
    cancelBtn->setAutoDefault(false);
    cancelBtn->setDefault(false); 
    connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

    projectEdit = new QLineEdit();
    subjectEdit = new QLineEdit();
    experimentEdit = new QLineEdit();
    experimenterEdit = new QLineEdit();
    conditionEdit = new QLineEdit();
    commentEdit = new QLineEdit();
    subjectEdit = new QLineEdit();
    setupEdit = new QLineEdit();
    
    QFormLayout *l = new QFormLayout();
    l->addRow(tr("Project name:"), projectEdit);
    l->addRow(tr("Experimenter:"), experimenterEdit);
    l->addRow(tr("Experiment name:"), experimentEdit);
    l->addRow(tr("Experimental condition:"), conditionEdit);
    l->addRow(tr("Subject id:"),subjectEdit);
    l->addRow(tr("Setup:"), setupEdit);
    l->addRow(tr("Comment:"), commentEdit);    
   
    QVBoxLayout *vbox = new QVBoxLayout();
    vbox->addLayout(l);
    vbox->addWidget(bb);
    this->setLayout(vbox);

    readMetadata();
}

ProjectSettings::~ProjectSettings(){}

void ProjectSettings::readMetadata() {
    metadata.read(settings);
    projectEdit->setText(metadata.project());
    experimentEdit->setText(metadata.experiment());
    experimenterEdit->setText(metadata.experimenter());
    conditionEdit->setText(metadata.condition());
    setupEdit->setText(metadata.setup());
    commentEdit->setText(metadata.comment());
    subjectEdit->setText(metadata.subject());
}

void ProjectSettings::accept() {
    this->metadata.project(projectEdit->text());
    this->metadata.experiment(experimentEdit->text());
    this->metadata.condition(conditionEdit->text());
    this->metadata.experimenter(experimenterEdit->text());
    this->metadata.subject(subjectEdit->text());
    this->metadata.comment(commentEdit->text());
    this->metadata.setup(setupEdit->text());
    metadata.store(settings);
    QDialog::accept();
}

ProjectMetadata ProjectSettings::getMetadata() {
    return metadata;
}


void ProjectMetadata::read(QSettings &settings) {
    this->projectName = settings.value("project/name", "None").toString();
    this->experimentName = settings.value("project/experiment", "None").toString();
    this->cond = settings.value("project/condition", "None").toString();
    this->experimenterName = settings.value("project/experimenter", "None").toString();
    this->setupName = settings.value("project/setup", "None").toString();
    this->cmmnt = settings.value("project/comment", "None").toString();
    this->subj = settings.value("project/subject", "None").toString();
}


void ProjectMetadata::store(QSettings &settings) {
    settings.setValue("project/name", this->projectName);
    settings.setValue("project/experiment", this->experimentName);
    settings.setValue("project/condition", this->cond);
    settings.setValue("project/experimenter", this->experimenterName);
    settings.setValue("project/subject", this->subj);
    settings.setValue("project/setup", this->setupName);
    settings.setValue("project/comment", this->cmmnt);
}