package mapgens

import (
	"lab.zaar.be/thefish/alchemyst-go/engine/gamemap"
	"lab.zaar.be/thefish/alchemyst-go/engine/types"
	"lab.zaar.be/thefish/alchemyst-go/util"
	"lab.zaar.be/thefish/alchemyst-go/util/delaunay"
)

func DelaunayMstExtGen(l *gamemap.Level) (*gamemap.Level, []gamemap.Room) {

	rng := util.NewRNG()

	//fill with walls
	for i := 0; i < l.W; i ++ {
		for j := 0; j < l.H; j++ {
			l.SetTileByXY(i, j, gamemap.NewWall())
		}
	}
	rooms := GetRandomRoomList(rng, l, maxrooms, minRoomSize, maxRoomSize)

	BlitToLevel(l, rooms)

	centers := make([]types.Coords, 0)
	for _, room := range rooms {
		centers = append(centers, room.Center)
	}
	edges := delaunay.GetMst(centers, l.W, l.H, l.W) //get negative Weights
	outlyingCorridors := make([]types.Edge, 0)
	outlyingCorrCount := 0
	for _, edge := range edges {
		MedianStraight(rng, l, rooms, centers, edge)
		outlyingCorridors = append(outlyingCorridors, edge)
		outlyingCorrCount++
		if outlyingCorrCount > 8 {
			break
		}
	}

	edges = delaunay.GetMst(centers, l.W, l.H, 0) //get negative Weights
	for _, edge := range edges {
		MedianStraight(rng, l, rooms, centers, edge)
	}

	return l, rooms
}