package nmslib

import (
	"fmt"
	"math/rand"
	"time"
)

/*
	[P][SSS][YY][ZZZ][XXX] – (P = Planet Index / S = Star System Index / Y = Height / Z = Width / X = Length)

	`Solar System Index
		A Solar System Index is assigned to each star system in a region. It always begins at SolarSystemIndex=001
		and counts up by one for every star system. The number of star systems in a region is variable so the
		maximum value of the Solar System Index is also variable, though the two correspond directly. To date there
		is no discovered value that is higher than SolarSystemIndex=243 (Mamundi-Kate in the Baadossm Anomaly of
		Euclid galaxy), meaning that 579 is the maximum number of star systems yet discovered in a region. Based
		on the evidence that every region has a SolarSystemIndex=079 and SolarSystemIndex=07A (with the former
		always having a Black Hole and the latter always having an Atlas Station), it is known that every region has
		at least 122 star systems. SolarSystemIndex=000 always leads to the region's first system, just like
		PlanetIndex=0 always leads to the first portal of a system due to the error proximity mechanic.`
	Source https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index

*/

func RndPortal() (final string) {
	rand.Seed(time.Now().UnixNano())
	min := 0x1
	ymax := 0xFF
	xzmax := 0xFFF
	ssimax := 0x242 // set this low to lower chances of an invalid address

	x := rand.Intn(xzmax-min+1) + min
	z := rand.Intn(xzmax-min+1) + min
	y := rand.Intn(ymax-min+1) + min
	ssi := rand.Intn(ssimax-min+1) + min

	final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, ssi, y, z, x)

	return
}
