package generator_test

import (
	"regexp"
	"testing"

	g "galaxy/game/internal/generator"

	"github.com/stretchr/testify/assert"
)

func TestPlanetRandomName(t *testing.T) {
	re, err := regexp.Compile(`^([a-zA-Z]+)-(\d{4})-(\d{4})$`)
	assert.NoError(t, err)
	if err != nil {
		return
	}
	for _, pc := range []g.PlanetClass{g.PlanetClassHW, g.PlanetClassDW, g.PlanetClassGiant, g.PlanetClassBig, g.PlanetClassNormal, g.PlanetClassRich, g.PlanetClassAsterioid} {
		t.Run(string(pc), func(t *testing.T) {
			name := g.NewPlanet(pc, g.Coordinate{0, 0}, 0, 0).RandomName()
			// `RandomName` formats `<class>-<4-digit>-<4-digit>`,
			// where each suffix is an independent `rand.Intn(1000)`.
			// We assert the wire format and the class prefix; an
			// earlier revision also asserted `g[2] != g[3]`, which
			// flaked on the legitimate ~0.1% collision (a property
			// the function does not — and need not — guarantee:
			// `generate_game.go` already tolerates duplicate names
			// across planets).
			groups := re.FindStringSubmatch(name)
			assert.NotNilf(t, groups, "cannot parse: %q", name)
			if groups == nil {
				return
			}
			assert.Equalf(t, 4, len(groups), "regexp groups")
			assert.Equal(t, string(pc), groups[1])
		})
	}
}
