package ip

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

	"github.com/axgle/mahonia"
)

type IPInfo struct {
	IP          string `json:"ip"`
	Pro         string `json:"pro"`
	ProCode     string `json:"proCode"`
	City        string `json:"city"`
	CityCode    string `json:"cityCode"`
	Region      string `json:"region"`
	RegionCode  string `json:"regionCode"`
	Addr        string `json:"addr"`
	RegionNames string `json:"regionNames"`
	Err         string `json:"err"`
}

//获取以太网IP
func GetEthernetInfo() *IPInfo {
	url := "http://whois.pconline.com.cn/ipJson.jsp?json=true"
	resp, err := http.Get(url)
	if err != nil {
		return nil
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil
	}
	bodystr := mahonia.NewDecoder("gbk").ConvertString(string(body))
	var result IPInfo
	if err := json.Unmarshal([]byte(bodystr), &result); err != nil {
		return nil
	}
	return &result
}

//获取本地Ip
func GetOutboundIP() string {
	conn, err := net.Dial("udp", "8.8.8.8:80")
	if err != nil {
		return ""
	}
	defer conn.Close()
	localAddr := conn.LocalAddr().(*net.UDPAddr)
	return localAddr.IP.String()
}
