package rpn.vc;

import java.util.Hashtable;
import rpn.Calculator;
import rpn.basic.Item;
import rpn.basic.DoubleValue;
import rpn.basic.CalcErr;
import rpn.basic.ErrItem;
import rpn.basic.IntItem;
import rpn.doubles.*;

public class VCDivItem extends Item {
	
	public VCDivItem(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 IntItem && b instanceof IntItem) {
				IntItem A = (IntItem) a;
				IntItem B = (IntItem) b;
				int na = A.n; int nb = B.n;
				Item c;
				if (nb != 0) {
					if ((na % nb) == 0) {
						c = new IntItem(ca, na/nb);
					} else { 
						double x = (double) na;
						double y = (double) nb;
						c = new DoubleItem(ca, x/y);
					}
					ca.pop(2);
					ca.push(c);
				} else {
					ca.error(this, CalcErr.ZeroDiv);
				}
			} else if (a instanceof DoubleValue && b instanceof DoubleValue) {
				double x = ((DoubleValue) a).doubleValue();
				double y = ((DoubleValue) b).doubleValue();
				if (y != 0) {
					Item c = new DoubleItem(ca, x/y);
					ca.pop(2);
					ca.push(c);
				} else {
					ca.error(this, CalcErr.ZeroDiv);
				}
			} else {
				ca.error(this, CalcErr.Type); 
			}
		} else {
			ca.error(this, CalcErr.Underflow);
		}
	}
	
	public String toString() {
		return("/");
	}
}