import io.data2viz.color.*
import io.data2viz.geo.geojson.fitSize
import io.data2viz.geo.geojson.geoPath
import io.data2viz.geo.geojson.path.geoCentroid
import io.data2viz.geo.geometry.geoGraticule
import io.data2viz.geo.projection.orthographicProjection
import io.data2viz.geojson.FeatureCollection
import io.data2viz.geojson.toGeoJsonObject
import io.data2viz.math.deg
import io.data2viz.viz.bindRendererOnNewCanvas
import io.data2viz.viz.viz
import org.w3c.fetch.Response
import kotlin.browser.window
import kotlin.js.Promise
const val defaultSize = 720.0
fun main() {
val request: Promise<Response> =
window.fetch("https://raw.githubusercontent.com/data2viz/data2viz/gh-pages/ex-geo-js/world-110m.geojson")
val projection = orthographicProjection()
request.then {
it.text().then {
val countries = (it.toGeoJsonObject() as FeatureCollection).features
/*
val country = countries
.first { it.id == "IND" }
val centroid = geoCentroid(country)
projection.rotate(-centroid[0].deg, -centroid[1].deg)
projection.fitSize(defaultSize, defaultSize, country)
*/
projection.translateX = defaultSize / 2
projection.translateY = defaultSize / 2
val graticule = geoGraticule().graticule()
viz {
width = defaultSize
height = defaultSize
countries.forEach {
geoPath(projection, path {
stroke = Colors.Web.black
strokeWidth = 1.0
fill = Colors.Web.whitesmoke
}).project(it)
}
}.bindRendererOnNewCanvas()
}
}
}