import json
import rand
import net.http

struct Weather {
	status      string @[skip] // drop this field
	api_version string @[skip]
	api_status  string @[skip]
	lang        string @[skip]
	unit        string @[skip]
	tzshift     int    @[skip]
	timezone    string @[skip]
	server_time u32    @[skip]
	location    []f32  @[skip]
	result      Result //[json: result] if the field name is different in JSON, it can be specified
}

struct Result {
	realtime          Realtime @[skip]
	minutely          Minutely @[skip]
	hourly            Hourly   @[skip]
	daily             Daily    @[skip]
	primary           int      @[skip]
	forecast_keypoint string
}

struct Realtime {}

struct Minutely {}

struct Hourly {}

struct Daily {}

fn main() {
	config := http.FetchConfig{
		user_agent: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
	}

	rnd := rand.f32()
	url := 'https://api.caiyunapp.com/v2.5/96Ly7wgKGq6FhllM/116.391912,40.010711/weather.jsonp?hourlysteps=120&random=${rnd}'
	// println(url)

	resp := http.fetch(http.FetchConfig{ ...config, url: url }) or {
		println('failed to fetch data from the server')
		return
	}

	weather := json.decode(Weather, resp.body) or {
		println('failed to decode weather json')
		return
	}

	println('未来两小时天气:\n${weather.result.forecast_keypoint}.')
}
