package ru.dbotthepony.kstarbound.defs.world

import com.google.common.collect.ImmutableList
import com.google.common.collect.ImmutableMap
import ru.dbotthepony.kommons.vector.Vector2d
import ru.dbotthepony.kstarbound.collect.WeightedList
import ru.dbotthepony.kstarbound.json.builder.JsonFactory

@JsonFactory
data class SystemWorldConfig(
	val starGravitationalConstant: Double,
	val planetGravitationalConstant: Double,
	val emptyOrbitSize: Double,
	val unvisitablePlanetSize: Double,
	val floatingDungeonWorldSizes: ImmutableMap<String, Double>,
	val planetSizes: ImmutableList<Pair<Int, Double>>,
	val starSize: Double,
	val planetaryOrbitPadding: Vector2d,
	val satelliteOrbitPadding: Vector2d,
	val arrivalRange: Vector2d,
	val objectSpawnPadding: Double,
	val clientObjectSpawnPadding: Double,
	val objectSpawnInterval: Vector2d,
	val objectSpawnCycle: Double,
	val minObjectOrbitTime: Double,
	val asteroidBeamDistance: Double,
	val emptySkyParameters: SkyParameters,

	val objectSpawnPool: WeightedList<String>,
	val initialObjectPools: WeightedList<Pair<Int, WeightedList<String>>>,

	val clientShip: ClientShip,
) {
	@JsonFactory
	data class ClientShip(
		val speed: Double,
		val orbitDistance: Double,
		val departTime: Double,
		val spaceDepartTime: Double,
	)
}
