#ifndef EXPRESSION_H
#define EXPRESSION_H

#include "tracemath.h"
#include "parser/mpParser.h"

namespace Math {

class Expression : public TraceMath
{
public:
    Expression();
    ~Expression();

    DataType outputType(DataType inputType) override;
    QString description() override;
    void edit() override;

    static QWidget* createExplanationWidget();

    virtual nlohmann::json toJSON() override;
    virtual void fromJSON(nlohmann::json j) override;
    Type getType() override {return Type::Expression;};

public slots:
    void inputSamplesChanged(unsigned int begin, unsigned int end) override;
    virtual void inputTypeChanged(DataType type) override;

private slots:
    void expressionChanged();
private:
    QString exp;
    mup::ParserX *parser;
    mup::Value t, d, f, w, x, P;
};

}

#endif // EXPRESSION_H
