package models;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Dependency extends RDLTerm{
	
	private RDLTerm term;
	private RDLVariable variable;
	private Dependency dependency;
	
	public Dependency(RDLTerm term, RDLVariable variable) {
		super(variable.getOrder());
		this.term = term;
		this.variable = variable;
		this.dependency = null;
	}
	
	public Dependency(Dependency dependency) {
		super(dependency.getOrder() - 1);
		this.dependency = dependency;
		this.term = null;
		this.variable = null;
	}
	
	public Dependency(RDLTerm term, RDLVariable variable, int order) {
		super(order);
		if(order == variable.order) {
			this.term = term;
			this.variable = variable;
			this.dependency = null;
		} else {
			this.dependency = new Dependency(term, variable, order+1);
			this.term = null;
			this.variable = null;
		}
	}
	
	public Dependency getDependency() {
		return this.dependency;
	}
	
	public void setDependency(Dependency dependency) {
		this.dependency = dependency;
	}
	
	@Override
	public int getTermOrder() {
		return getOrder() - 1;
	}
	
	@Override
	public String toStr() {
		StringBuilder sb = new StringBuilder();
		if(dependency == null) {
			sb.append(term.toStr());
			sb.append(" : ");
			sb.append(variable.toStr());
		} else {
			sb.append('[');
			sb.append(dependency.toStr());
			sb.append(']');
		}
		return sb.toString();
	}
	
	@Override
	public String toTermStr() {
		return "[" + toStr() + "]";
	}

}
