package rpn.fc;

import java.util.Hashtable;
import rpn.Calculator;
import rpn.basic.Item;
import rpn.basic.CalcErr;
import rpn.basic.ErrItem;
import rpn.basic.StringItem;
import rpn.basic.IntValue;
import rpn.basic.IntItem;

public class FCMinusItem extends Item {
	
	public FCMinusItem(Calculator ca) {
		super(ca);
		ca.systemInstall(this);
	}
	
	public void exec() {
		if (ca.check(2)) {
			Item a = ca.peek(1);
			Item b = ca.peek(0);
			if (a instanceof IntValue && b instanceof IntValue) {
				int A = ((IntValue) a).intValue();
				int B = ((IntValue) b).intValue();
				Item c = new IntItem(ca, A-B);
				ca.pop(2);
				ca.push(c);
			} else if (a instanceof FracValue && b instanceof FracValue) {
				fraction x = ((FracValue) a).fracValue();
				fraction y = ((FracValue) b).fracValue();
				fraction z = fraction.diff(x, y);
				if (fraction.isLegal(z)) {
					Item c = new FracItem(ca, z);
					ca.pop(2);
					ca.push(c);
				}
			} /* else if (a instanceof FCVectorItem && b instanceof FCVectorItem) {
				FCVectorItem A = (FCVectorItem) a;
				FCVectorItem B = (FCVectorItem) b;
				Item c = A.minus(B);
				ca.pop(2);
				ca.push(c);
			} */ else {
				ca.error(this, CalcErr.Type);
			}
		} else {
			ca.error(this, CalcErr.Underflow);
		}
	}
	
	public String toString() {
		return("+");
	}
}