package utils

import (
	"fmt"
	"log"

	"github.com/go-resty/resty/v2"
)

type IpRequest struct {
}

type IPAPIResponse struct {
	As            string  `json:"as"`
	Asname        string  `json:"asname"`
	City          string  `json:"city"`
	Continent     string  `json:"continent"`
	ContinentCode string  `json:"continentCode"`
	Country       string  `json:"country"`
	CountryCode   string  `json:"countryCode"`
	Currency      string  `json:"currency"`
	District      string  `json:"district"`
	Hosting       bool    `json:"hosting"`
	Isp           string  `json:"isp"`
	Lat           float64 `json:"lat"`
	Lon           float64 `json:"lon"`
	Mobile        bool    `json:"mobile"`
	Offset        float64 `json:"offset"`
	Org           string  `json:"org"`
	Proxy         bool    `json:"proxy"`
	Query         string  `json:"query"`
	Region        string  `json:"region"`
	RegionName    string  `json:"regionName"`
	Timezone      string  `json:"timezone"`
	Zip           string  `json:"zip"`
}

func (*IpRequest) IpApi(targetIP string) (IPAPIResponse, error) {
	// 创建Resty客户端
	client := resty.New()

	// 构建请求URL
	// targetIP := "103.142.140.235"
	var url string = "http://demo.ip-api.com/json?fields=66842623&lang=en"
	if targetIP != "" {
		url = fmt.Sprintf("http://demo.ip-api.com/json/%s?fields=66842623&lang=en", targetIP)
	}

	// 创建响应结构体实例
	var result IPAPIResponse

	// 发送GET请求（不设置任何请求头）
	resp, err := client.R().
		SetResult(&result). // 自动解析JSON到结构体
		Get(url)

	// 错误处理
	if err != nil {
		fmt.Printf("请求失败: %v\n", err)
		return result, err
	}

	// 检查HTTP状态码
	if resp.StatusCode() != 200 {
		fmt.Printf("API返回错误状态码: %d\n", resp.StatusCode())
		return result, err
	}

	return result, nil
}

func (*IpRequest) GetIPAddress() {
	// 创建Resty客户端
	client := resty.New()
	var url string = "http://icanhazip.com/"
	// 发送GET请求（不设置任何请求头）
	resp, err := client.R().
		Get(url)
	// 错误处理
	if err != nil {
		fmt.Printf("请求失败: %v\n", err)
	}
	log.Println(resp)
}
