var Node = require(“./node”);

var Condition = function (op, l, r, i, negate) {

this.op = op.trim();
this.lvalue = l;
this.rvalue = r;
this.index = i;
this.negate = negate;

}; Condition.prototype = new Node(); Condition.prototype.type = “Condition”; Condition.prototype.accept = function (visitor) {

this.lvalue = visitor.visit(this.lvalue);
this.rvalue = visitor.visit(this.rvalue);

}; Condition.prototype.eval = function (context) {

var result = (function (op, a, b) {
    switch (op) {
        case 'and': return a && b;
        case 'or':  return a || b;
        default:
            switch (Node.compare(a, b)) {
                case -1:
                    return op === '<' || op === '=<' || op === '<=';
                case 0:
                    return op === '=' || op === '>=' || op === '=<' || op === '<=';
                case 1:
                    return op === '>' || op === '>=';
                default:
                    return false;
            }
    }
})(this.op, this.lvalue.eval(context), this.rvalue.eval(context));

return this.negate ? !result : result;

}; module.exports = Condition;