package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
)

type CityParmam struct {
	City      string  `json:"city"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
}

func LoadCityGeoJson() ([]CityParam, error) {
	citysDir := "../config/ChinaGeoJson/citys"
	files, err := os.ReadDir(citysDir)
	if err != nil {
		return nil, fmt.Errorf("read citys directory failed: %v", err)
	}

	var cityParams []CityParam

	for _, file := range files {
		if !file.IsDir() && strings.HasSuffix(file.Name(), ".json") {
			// 从文件名中提取城市名称（去除.json后缀）
			cityName := strings.TrimSuffix(file.Name(), ".json")

			// 读取文件内容
			filePath := filepath.Join(citysDir, file.Name())
			content, err := ioutil.ReadFile(filePath)
			if err != nil {
				fmt.Printf("read city file %s failed: %v\n", file.Name(), err)
				continue
			}

			// 解析JSON
			var geoJson struct {
				Features []struct {
					Properties struct {
						Center []float64 `json:"center"`
					} `json:"properties"`
				} `json:"features"`
			}

			if err := json.Unmarshal(content, &geoJson); err != nil {
				fmt.Printf("unmarshal city file %s failed: %v\n", file.Name(), err)
				continue
			}

			// 提取中心坐标（使用第一个feature的center）
			if len(geoJson.Features) > 0 && len(geoJson.Features[0].Properties.Center) >= 2 {
				center := geoJson.Features[0].Properties.Center
				cityParam := CityParam{
					City:      cityName,
					Longitude: center[0], // 注意：GeoJSON的坐标顺序是[经度, 纬度]
					Latitude:  center[1],
				}
				cityParams = append(cityParams, cityParam)
			}
		}
	}

	return cityParams, nil
}

func main() {
	// 测试LoadCityGeoJson函数
	citys, err := LoadCityGeoJson()
	if err != nil {
		fmt.Println("LoadCityGeoJson failed:", err)
		return
	}
	fmt.Println("Loaded", len(citys), "cities from GeoJson files")
	// 打印前5个城市作为测试
	for _, city := range citys {
		// if i < 5 {
		fmt.Printf("City: %s, Latitude: %.4f, Longitude: %.4f\n", city.City, city.Latitude, city.Longitude)
		// }
	}

	cityJson, err := json.Marshal(citys)
	if err != nil {
		fmt.Println("Marshal citys failed:", err)
		return
	}

	os.WriteFile("../config/city_geo.json", []byte(cityJson), 0644)
}
