package utils

import (
	"fmt"
	"log"
	"sundynix-go/utils/location"
	"sundynix-go/utils/timer"
	"sundynix-go/utils/uniqueid"
	"testing"
	"time"
)

func TestHashPwd(t *testing.T) {
	hash := BcryptHash("sundynix")
	fmt.Println(hash) // $2a$10$QC/zkQ/ohPmvjF/goDyicu7cHgAEj8gHg6OTDHWhbYQMHHn4dwxX2

	//check := BcryptCheck("sundynix", "$2a$10$QC/zkQ/ohPmvjF/goDyicu7cHgAEj8gHg6OTDHWhbYQMHHn4dwxX2")
	//fmt.Println(check)
}

func TestUuid(t *testing.T) {
	id := uniqueid.GenerateId()
	fmt.Println(id)
}

func TestTimePeriod(t *testing.T) {
	str := "2025-11-19 10:29:20.597"
	parse, _ := time.ParseInLocation("2006-01-02 15:04:05.999999999", str, time.Local)
	interval := timer.TimeInterval(parse)
	fmt.Println(interval)
}

func TestPoint2Code(t *testing.T) {
	//latitude := float32(39.90882)
	//longitude := float32(116.39748)
	longitude := float32(102.74837)
	latitude := float32(25.02847)
	// 调用逆地理编码
	entity, err := location.Point2code(longitude, latitude)
	if err != nil {
		log.Fatalf("获取地址失败: %v", err)
	}

	// 打印结果
	// 打印结果
	fmt.Println("=== 解析结果 ===")
	fmt.Println("格式化地址:", entity.Address)
	fmt.Println("省份:", entity.AddressComponent.Province.String())
	fmt.Println("城市:", entity.AddressComponent.City.String())
	fmt.Println("区县:", entity.AddressComponent.District.String())
	fmt.Println("乡镇:", entity.AddressComponent.Township)
	fmt.Println("街道:", entity.AddressComponent.Street)
	fmt.Println("门牌号:", entity.AddressComponent.StreetNumber.Number)
	fmt.Println("门牌号所属街道:", entity.AddressComponent.StreetNumber.Street)
	fmt.Println("行政区划编码:", entity.AddressComponent.Adcode)
	fmt.Println("国家:", entity.AddressComponent.Country)
}

func TestWeather(t *testing.T) {

	adcode := "532325"
	// 可选：extensions="all" 查询实时+未来3天预报
	weatherResp, err := location.GetWeather(adcode, "base")
	if err != nil {
		log.Fatalf("查询天气失败: %v", err)
	}

	// 打印实时天气
	fmt.Println("=== 实时天气 ===")
	live := weatherResp.Lives[0] // 实时天气数组仅1条数据
	fmt.Printf("省份：%s\n", live.Province)
	fmt.Printf("城市：%s\n", live.City)
	fmt.Printf("行政区划编码：%s\n", live.Adcode)
	fmt.Printf("天气：%s\n", live.Weather)
	fmt.Printf("实时气温：%s℃\n", live.Temperature)
	fmt.Printf("风向：%s\n", live.WindDirection)
	fmt.Printf("风力：%s级\n", live.WindPower)
	fmt.Printf("湿度：%s%%\n", live.Humidity)
	fmt.Printf("数据更新时间：%s\n", live.ReportTime)

	// 若查询的是all（实时+预报），打印预报数据
	// if len(weatherResp.Forecasts) > 0 {
	// 	fmt.Println("\n=== 未来3天预报 ===")
	// 	forecast := weatherResp.Forecasts[0]
	// 	for _, day := range forecast.Casts {
	// 		fmt.Printf("\n日期：%s（星期%s）\n", day.Date, day.Week)
	// 		fmt.Printf("白天天气：%s，温度：%s℃\n", day.DayWeather, day.DayTemp)
	// 		fmt.Printf("夜间天气：%s，温度：%s℃\n", day.NightWeather, day.NightTemp)
	// 		fmt.Printf("白天风向/风力：%s/%s级\n", day.DayWindDir, day.DayWindPower)
	// 	}
	// }
}

func TestGenOrderNo(t *testing.T) {
	no := uniqueid.GenOrderNo()
	fmt.Println(no)
}

func TestTime(t *testing.T) {
	milliTimestamp := time.Now().UnixMilli()
	microTimestamp := time.Now().UnixMicro()

	fmt.Printf("毫秒级时间戳: %d\n", milliTimestamp)
	fmt.Printf("微秒级时间戳: %d\n", microTimestamp)
}

func TestGetZeroTime(t *testing.T) {
	zeroTime := timer.GetZeroTime()
	fmt.Printf("当天零点: %v\n", zeroTime)
	fmt.Printf("时间戳(秒): %v\n", zeroTime.Unix())
}
