package myip

import (
	_ "embed"
	"fmt"
	"github.com/lionsoul2014/ip2region/binding/golang/xdb"
	"strings"
)

var (
	searcher *xdb.Searcher

	//go:embed ip2region.xdb
	dbData []byte
)

func init() {
	var err error
	// 2、用全局的 cBuff 创建完全基于内存的查询对象。
	searcher, err = xdb.NewWithBuffer(xdb.IPv4, dbData)
	if err != nil {
		panic(fmt.Errorf("failed to create searcher with content: %s", err))
	}

}

type IpInfo struct {
	Country  string `json:"country"`
	Area     string `json:"area"`
	Province string `json:"province"`
	City     string `json:"city"`
	Isp      string `json:"isp"`
}

func FindE(ipStr string) (info *IpInfo, err error) {
	info = &IpInfo{}
	// 国家|区域|省份|城市|ISP
	res, err := searcher.SearchByStr(ipStr)
	if err != nil {
		return
	}
	//fmt.Println(res)

	sp := strings.Split(res, "|")
	if len(sp) < 5 {
		return
	}

	info.Country = convertEmpty(sp[0])
	info.Area = convertEmpty(sp[1])
	info.Province = convertEmpty(sp[2])
	info.City = convertEmpty(sp[3])
	info.Isp = convertEmpty(sp[4])

	return info, nil
}

func Find(ipStr string) *IpInfo {
	info, _ := FindE(ipStr)
	return info
}

func convertEmpty(s string) string {
	if s == "0" || s == "" {
		return "NULL"
	}

	return s
}

func (i *IpInfo) ToString() string {
	return i.Country + "-" + i.Province + "-" + i.City + "-" + i.Isp
}
