package se.chalmers.cs.gf.dot;

import java.awt.Point;

import se.chalmers.cs.gf.dot.Absyn.*;

public class DotUtil {

        public static Point getPosAttr(MaybeAttrList as, String l) {
                return idPos(getAttr(as, l));
        }

        public static String getStringAttr(MaybeAttrList as, String l) {
                return idValue(getAttr(as, l));
        }

        public static double getDoubleAttr(MaybeAttrList as, String l) {
                return idDouble(getAttr(as, l));
        }

        public static ID getAttr(MaybeAttrList as, String l) {
                if (as instanceof NoAttrList)
                        return null;

                for (Attr a : ((AnAttrList)as).listattr_) {
                        if (idValue(a.id_1).equals(l)) 
                                return a.id_2;
                }

                return null;
        }

        public static String idValue(ID id) {
                if (id instanceof IdentID)
                        return ((IdentID)id).ident_;
                if (id instanceof StringID)
                        return ((StringID)id).string_;
                if (id instanceof IntID)
                        return ((IntID)id).integer_.toString();
                if (id instanceof DoubleID)
                        return ((DoubleID)id).double_.toString();
                throw new RuntimeException("Bad DOT ID: " + id);
        }

        public static double idDouble(ID id) {
                if (id instanceof StringID)
                        return Double.parseDouble(((StringID)id).string_);
                if (id instanceof IntID)
                        return ((IntID)id).integer_;
                if (id instanceof DoubleID)
                        return ((DoubleID)id).double_;
                throw new RuntimeException("Bad DOT ID: " + id);
        }

        private static Point idPos(ID id) {
                if (!(id instanceof StringID))
                        return null;

                String s = ((StringID)id).string_;
                int i = s.indexOf(",");
                if (i == -1)
                        return null;
                int x = Integer.parseInt(s.substring(0,i));
                int y = Integer.parseInt(s.substring(i+1));
                return new Point(x,y);
        }

}