#ifndef SWITCHER_H
#define SWITCHER_H

#include <QString>
#include <QWidget>
#include <QDebug>
#include <QDomElement>

class Switcher: public QObject
{
    Q_OBJECT

protected:
    QString name;
    QString info;
    QString switcher;
    bool multi;
    bool quotes;
    bool required;

public:
    Switcher();

    ~Switcher();

    void set(QString name, QString info, QString switcher, bool multi, bool quotes) {
        this->name = name;
        this->info = info;
        this->switcher = switcher;
        this->multi = multi;
        this->quotes = quotes;
    }

    void setName(QString n){
        this->name = n;
    }

    QString getName() {
        return name;
    }

    void setInfo(QString n){
        this->info = n;
    }

    QString getInfo() {
        return info;
    }

    QString getSwitcher() {
        return switcher;
    }

    void setSwitcher(QString n){
        this->switcher = n;
    }

    void setMulti(bool n){
        this->multi = n;
    }

    void setQuotes(bool n){
        this->quotes = n;
    }

    bool isRequired() {
        return required;
    }

    QString print(){
        return name +" "+switcher + " " +multi+ " "+quotes;
    }

    virtual QWidget* getComponent(QWidget *parent) {
        return 0;
    }

    virtual QString buildSwitcherString() {
        return "";
    }

    virtual QDomNode& getProjectNode(QDomElement &el) {
        el.setAttribute("name", name);
        el.setAttribute("switcher", switcher);
        return el;
    }

    virtual void setValuesFromNode(QDomElement &el);

    virtual void setSavedValues(QDomElement &el) {}

    QString quotesText(QString text) {
        if (quotes) return "\"" + text + "\"";
        else return text;
    }

public slots:
    void onChange() {
        emit(change());
    }

signals:
    void change();
};

#endif // SWITCHER_H
