package main

import (
	"encoding/json"
	"io/ioutil"
	"log"
	"net/http"
)

type Weather struct {
	STATUS      string
	LANG        string
	UNIT        string
	SERVER_TIME uint16
	LOCATION    []float32
	API_STATUS  string
	TZSHIFT     uint16
	API_VERSION string
	RESULT      Result
}

type Result struct {
	STATUS        string
	O3            float32
	CO            float32
	TEMPERATURE   float32
	PM10          float32
	SKYCON        string
	CLOUDRATE     float32
	AQI           float32
	DSWRF         float32
	VISIBILITY    float32
	HUMIDITY      float32
	SO2           float32
	ULTRAVIOLET   Ultraviolet
	PRES          float32
	PM25          float32
	NO2           float32
	PERCIPITATION Precipitation
	COMFORT       Comfort
	WIND          Wind
}

type Ultraviolet struct {
	INDEX int
	DESC  string
}

type Precipitation struct {
	NEAREST Nearest
	LOCAL   Local
}

type Nearest struct {
	STATUS    string
	DISTANCE  float32
	INTENSITY float32
}

type Local struct {
	STATUS     string
	INTENSITY  int
	DATASOURCE string
}

type Comfort struct {
	INDEX int
	DESC  string
}

type Wind struct {
	DIRECTION float32
	SPEED     float32
}

var iconurl = conf.ICONURL

// 获取天气
func get_weather() {
	result, _ := http.Get("https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/113.960256,22.541454/realtime.json")
	body, _ := ioutil.ReadAll(result.Body)
	log.Println(string(body))
	data := Weather{}
	json.Unmarshal(body, &data)
	var icon string
	switch data.RESULT.SKYCON {
	case "CLEAR_DAY":
		icon = iconurl + "CLEAR_DAY.png"
	case "CLEAR_NIGHT":
		icon = iconurl + "CLEAR_NIGHT.png"
	case "PARTLY_CLOUDY_DAY":
		icon = iconurl + "PARTLY_CLOUDY_DAY.png"
	case "PARTLY_CLOUDY_NIGHT":
		icon = iconurl + "PARTLY_CLOUDY_NIGHT.png"
	case "CLOUDY":
		icon = iconurl + "icon/CLOUDY.png"
	case "RAIN":
		icon = iconurl + "RAIN.png"
	case "SNOW":
		icon = iconurl + "SNOW.png"
	case "WIND":
		icon = iconurl + "WIND.png"
	case "HAZE":
		icon = iconurl + "HAZE.png"
	}
	insert_db(data, icon)
}

func insert_db(data Weather, icon string) {
	stmt, _ := db.Prepare(`INSERT INTO weather (
    	skycon,
    	icon_url,
    	o3,
    	co,
    	so2,
    	no2,
    	temperature,
    	humidity,
    	pm25,
    	pm10,
    	cloudrate,
    	aqi,
    	dswrf,
    	visibility,
    	ultraviolet_desc,
    	pres,
    	precipitation_nearest_distance,
    	precipitation_nearest_intensity,
    	precipitation_local_intensity,
    	comfort_desc,
    	wind_direction,
    	wind_speed) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
	stmt.Exec(
		data.RESULT.SKYCON,
		icon,
		data.RESULT.O3,
		data.RESULT.CO,
		data.RESULT.SO2,
		data.RESULT.NO2,
		data.RESULT.TEMPERATURE,
		data.RESULT.HUMIDITY,
		data.RESULT.PM25,
		data.RESULT.PM10,
		data.RESULT.CLOUDRATE,
		data.RESULT.AQI,
		data.RESULT.DSWRF,
		data.RESULT.VISIBILITY,
		data.RESULT.ULTRAVIOLET.DESC,
		data.RESULT.PRES,
		data.RESULT.PERCIPITATION.NEAREST.DISTANCE,
		data.RESULT.PERCIPITATION.NEAREST.INTENSITY,
		data.RESULT.PERCIPITATION.LOCAL.INTENSITY,
		data.RESULT.COMFORT.DESC,
		data.RESULT.WIND.DIRECTION,
		data.RESULT.WIND.SPEED)
}