package models.formulas.meta;

import java.util.Map;

import exceptions.IllegalTypeException;
import lombok.Getter;
import models.algebra.Variable;
import models.formulas.EquationFormula;
import models.formulas.Formula;
import models.terms.RDLTerm;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.OrderVariableConstraint;

@Getter
public class MetaEquationFormula extends MetaFormula {

	private MetaRDLTerm leftSideHand;
	private MetaRDLTerm rightSideHand;
	
	public MetaEquationFormula(MetaRDLTerm left, MetaRDLTerm right) {
		if (! left.isEvaluatableTerm()) {
			throw new IllegalTypeException();
		}
		if (! right.isEvaluatableTerm()) {
			throw new IllegalTypeException();
		}
		
		this.leftSideHand = left;
		this.rightSideHand = right;
	}
	
	@Override
	public boolean isMatchedBy(Formula formula, Map<Variable, RDLTerm> binding,
			Map<Variable, OrderVariableConstraint> orderConstraint) {
		if (! (formula instanceof EquationFormula)) {
			return false;
		}
		EquationFormula eq = (EquationFormula) formula;
		return leftSideHand.isMatchedBy(eq.getLeftSideHand(), binding, orderConstraint) && rightSideHand.isMatchedBy(eq.getRightSideHand(), binding, orderConstraint);
	}
	
	
	
}
