package quadtree

// GetContent remplit le tableau contentHolder (qui représente
// un terrain dont la case le plus en haut à gauche a pour coordonnées
// (topLeftX, topLeftY)) à partir du quadtree q.
// Note : marche pour les terrains rectangulaires avec simplification
func (q Quadtree) GetContent(topLeftX, topLeftY int, contentHolder [][]int) {

	// Cas de bases //
	if len(contentHolder) == 0 {
		return
	} else if len(contentHolder[0]) == 0 {
		return
	}

	// Toutes les cases sont mises à -1 par défaut, en attendant la récupération par GetNodeContent //
	for i := 0; i < len(contentHolder); i++ {
		for j := 0; j < len(contentHolder[0]); j++ {
			contentHolder[i][j] = -1
		}
	}

	GetNodeContent(q.root, topLeftX, topLeftY, contentHolder)
}

func GetNodeContent(n *node, Origine_X, Origine_Y int, contentHolder [][]int) {

	// Cas de base, avec simplification (si height ou width vaut 0, le noeud n'entrera pas dans les deux boucles //
	if n.isLeaf {
		for i := 0; i < n.height && i+n.topLeftY < len(contentHolder)+Origine_Y; i++ {
			for j := 0; j < n.width && j+n.topLeftX < len(contentHolder[0])+Origine_X; j++ {
				if n.topLeftY+i < len(contentHolder)+Origine_Y && n.topLeftX+j < len(contentHolder[0])+Origine_X && i+n.topLeftY >= Origine_Y && j+n.topLeftX >= Origine_X {
					contentHolder[i+n.topLeftY-Origine_Y][j+n.topLeftX-Origine_X] = n.content
				}
			}
		}

	} else {
		// Cas récursif //
		GetNodeContent(n.topLeftNode, Origine_X, Origine_Y, contentHolder)
		GetNodeContent(n.topRightNode, Origine_X, Origine_Y, contentHolder)
		GetNodeContent(n.bottomLeftNode, Origine_X, Origine_Y, contentHolder)
		GetNodeContent(n.bottomRightNode, Origine_X, Origine_Y, contentHolder)
	}
}
