package dagro

import 

func adjustCoordinateSystem( *Graph) {
	 := strings.ToLower(stringValue(asAttrs(.Graph()), "rankdir"))
	if  == "lr" ||  == "rl" {
		swapWidthHeight()
	}
}

func undoCoordinateSystem( *Graph) {
	 := strings.ToLower(stringValue(asAttrs(.Graph()), "rankdir"))
	if  == "bt" ||  == "rl" {
		reverseY()
	}
	if  == "lr" ||  == "rl" {
		swapXY()
		swapWidthHeight()
	}
}

func swapWidthHeight( *Graph) {
	for ,  := range .Nodes() {
		swapWidthHeightOne(asAttrs(.Node()))
	}
	for ,  := range .Edges() {
		swapWidthHeightOne(asAttrs(.Edge()))
	}
}

func swapWidthHeightOne( Attrs) {
	["width"], ["height"] = ["height"], ["width"]
}

func reverseY( *Graph) {
	for ,  := range .Nodes() {
		 := asAttrs(.Node())
		["y"] = -num(, "y")
	}
	for ,  := range .Edges() {
		 := asAttrs(.Edge())
		,  := ["points"].([]Point)
		for  := range  {
			[].Y = -[].Y
		}
		["points"] = 
		if has(, "y") {
			["y"] = -num(, "y")
		}
	}
}

func swapXY( *Graph) {
	for ,  := range .Nodes() {
		swapXYOne(asAttrs(.Node()))
	}
	for ,  := range .Edges() {
		 := asAttrs(.Edge())
		,  := ["points"].([]Point)
		for  := range  {
			[].X, [].Y = [].Y, [].X
		}
		["points"] = 
		if has(, "x") {
			["x"], ["y"] = ["y"], ["x"]
		}
	}
}

func swapXYOne( Attrs) { ["x"], ["y"] = ["y"], ["x"] }