#ifndef PROJECTSETTINGS_H
#define PROJECTSETTINGS_H

#include <QDialog>
#include <QLineEdit>
#include <QSettings>

class ProjectMetadata {
    public:
    ProjectMetadata(){};
    ~ProjectMetadata(){};

    void read(QSettings &settings);

    void store(QSettings &settings);

    void project(const QString &name) {
        this->projectName = name;
    }; 

    QString project() const {
        return this->projectName;
    };

    void experiment(const QString &experiment) {
        this->experimentName = experiment;
    };
    
    QString experiment() const {
        return this->experimentName;
    };

    void condition(const QString &condition) {
        this->cond = condition;
    };

    QString condition() const {
        return this->cond;
    };

    void experimenter(const QString &experimenter) {
        this->experimenterName = experimenter;
    };

    QString experimenter() const {
        return this->experimenterName;
    };

    void subject(const QString &subject) {
        this->subj = subject;
    };

    QString subject() const {
        return this->subj;
    };

    void setup(const QString &setup){
        this->setupName = setup;
    };

    QString setup() const {
        return this->setupName;
    };

    void comment(const QString &comment) {
        this->cmmnt = comment;
    };

    QString comment() const {
        return this->cmmnt;
    };

    private:
    QString projectName;
    QString experimenterName;
    QString experimentName;
    QString cond;
    QString subj;
    QString setupName;
    QString cmmnt;
};


//! [0]
class ProjectSettings : public QDialog
{
    Q_OBJECT
    public:
    ProjectSettings(QWidget *parent = nullptr);
    ~ProjectSettings();

    ProjectMetadata getMetadata();

    private:
    QSettings settings;
    ProjectMetadata metadata;
    QLineEdit *projectEdit, *experimentEdit, *experimenterEdit, *subjectEdit, *setupEdit, *conditionEdit, *commentEdit;
    
    void accept();
    void readMetadata();

};

#endif