package restriction

import "time"

type Response struct {
	Province string
	City     string
	Region   string
	Isp      string
	IsProxy  *bool `json:"isProxy,omitempty"`
	RawData  string
}

type ResponseWithProxy struct {
	Response
}

type PCOnlineResponse 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"`
}

type CSDNResponse struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
	Data struct {
		Address string `json:"address"`
		Ip      string `json:"ip"`
	} `json:"data"`
}

type OlToolsResponse struct {
	Ip            string  `json:"ip"`
	Success       bool    `json:"success"`
	Type          string  `json:"type"`
	Continent     string  `json:"continent"`
	ContinentCode string  `json:"continent_code"`
	Country       string  `json:"country"`
	CountryCode   string  `json:"country_code"`
	Region        string  `json:"region"`
	RegionCode    string  `json:"region_code"`
	City          string  `json:"city"`
	Latitude      float64 `json:"latitude"`
	Longitude     float64 `json:"longitude"`
	IsEu          bool    `json:"is_eu"`
	Postal        string  `json:"postal"`
	CallingCode   string  `json:"calling_code"`
	Capital       string  `json:"capital"`
	Borders       string  `json:"borders"`
	Flag          struct {
		Img          string `json:"img"`
		Emoji        string `json:"emoji"`
		EmojiUnicode string `json:"emoji_unicode"`
	} `json:"flag"`
	Connection struct {
		Asn    int    `json:"asn"`
		Org    string `json:"org"`
		Isp    string `json:"isp"`
		Domain string `json:"domain"`
	} `json:"connection"`
	Timezone struct {
		Id          string    `json:"id"`
		Abbr        string    `json:"abbr"`
		IsDst       bool      `json:"is_dst"`
		Offset      int       `json:"offset"`
		Utc         string    `json:"utc"`
		CurrentTime time.Time `json:"current_time"`
	} `json:"timezone"`
}

type IdCdResponse struct {
	Status    bool        `json:"status"`
	Message   string      `json:"message"`
	ErrorCode interface{} `json:"error_code"`
	Data      struct {
		Ip      string `json:"ip"`
		Country string `json:"country"`
		Region  string `json:"region"`
		City    string `json:"city"`
		County  string `json:"county"`
		Isp     string `json:"isp"`
		Area    string `json:"area"`
		X       string `json:"x"`
		Y       string `json:"y"`
	} `json:"data"`
}

type MeiTuResponse struct {
	AreaCode            string  `json:"area_code"`
	City                string  `json:"city"`
	CityId              int     `json:"city_id"`
	Continent           string  `json:"continent"`
	ContinentCode       string  `json:"continent_code"`
	CountryId           int     `json:"country_id"`
	Isp                 string  `json:"isp"`
	Latitude            float64 `json:"latitude"`
	Longitude           float64 `json:"longitude"`
	Nation              string  `json:"nation"`
	NationCode          string  `json:"nation_code"`
	Province            string  `json:"province"`
	ProvinceId          int     `json:"province_id"`
	Subdivision1IsoCode string  `json:"subdivision_1_iso_code"`
	Subdivision1Name    string  `json:"subdivision_1_name"`
	Subdivision2IsoCode string  `json:"subdivision_2_iso_code"`
	Subdivision2Name    string  `json:"subdivision_2_name"`
	TimeZone            string  `json:"time_zone"`
}

type VoResponse struct {
	Code   int    `json:"code"`
	Msg    string `json:"msg"`
	IpInfo struct {
		Type string `json:"type"`
		Text string `json:"text"`
		Cnip bool   `json:"cnip"`
	} `json:"ipinfo"`
	IpData struct {
		Info1 string `json:"info1"`
		Info2 string `json:"info2"`
		Info3 string `json:"info3"`
		Isp   string `json:"isp"`
	} `json:"ipdata"`
	AdCode struct {
		O string `json:"o"`
		P string `json:"p"`
		C string `json:"c"`
		N string `json:"n"`
		R string `json:"r"`
		A string `json:"a"`
		I bool   `json:"i"`
	} `json:"adcode"`
	Tips string `json:"tips"`
	Time int    `json:"time"`
}

type DBIPResponse struct {
	IpAddress     string `json:"ipAddress"`
	ContinentCode string `json:"continentCode"`
	ContinentName string `json:"continentName"`
	CountryCode   string `json:"countryCode"`
	CountryName   string `json:"countryName"`
	StateProv     string `json:"stateProv"`
	City          string `json:"city"`
}

type QJQQResponse struct {
	Code int `json:"code"`
	Data struct {
		Ip             string `json:"ip"`
		Continent      string `json:"continent"`
		CountryEnglish string `json:"country_english"`
		Country        string `json:"country"`
		Prov           string `json:"prov"`
		City           string `json:"city"`
		District       string `json:"district"`
		Isp            string `json:"isp"`
		Lat            string `json:"lat"`
		Lng            string `json:"lng"`
		AreaCode       string `json:"area_code"`
		CityCode       string `json:"city_code"`
		Elevation      string `json:"elevation"`
		TimeZone       string `json:"time_zone"`
		WeatherStation string `json:"weather_station"`
		ZipCode        string `json:"zip_code"`
	} `json:"data"`
	Msg    string `json:"msg"`
	Ip     string `json:"ip"`
	Time   string `json:"time"`
	Source string `json:"source"`
}

type IQIYIResponse struct {
	Code string `json:"code"`
	Msg  string `json:"msg"`
	Data struct {
		ContinentCN    string `json:"continentCN"`
		CountryCN      string `json:"countryCN"`
		ZoneCN         string `json:"zoneCN"`
		ProvinceCN     string `json:"provinceCN"`
		CityCN         string `json:"cityCN"`
		CountyCN       string `json:"countyCN"`
		TownCN         string `json:"townCN"`
		IspCN          string `json:"ispCN"`
		ContinentID    int    `json:"continentID"`
		CountryID      int    `json:"countryID"`
		ZoneID         int    `json:"zoneID"`
		ProvinceID     int    `json:"provinceID"`
		CityID         int    `json:"cityID"`
		CountyID       int    `json:"countyID"`
		IspID          int    `json:"ispID"`
		TownID         int    `json:"townID"`
		Latitude       string `json:"latitude"`
		Longitude      string `json:"longitude"`
		OverseasRegion bool   `json:"overseasRegion"`
	} `json:"data"`
}

type IP66Response struct {
	Code int `json:"code"`
	Data struct {
		Location struct {
			City           string `json:"city"`
			Country        string `json:"country"`
			CountryEnglish string `json:"country_english"`
			Ip             string `json:"ip"`
			Isp            string `json:"isp"`
			Latitude       string `json:"latitude"`
			Longitude      string `json:"longitude"`
			Province       string `json:"province"`
		} `json:"location"`
	} `json:"data"`
	Msg string `json:"msg"`
}

type IP66ProxyResponse struct {
	Code int `json:"code"`
	Data struct {
		Location struct {
			AreaCode       string `json:"area_code"`
			City           string `json:"city"`
			CityCode       string `json:"city_code"`
			Continent      string `json:"continent"`
			Country        string `json:"country"`
			CountryCode    string `json:"country_code"`
			District       string `json:"district"`
			Elevation      string `json:"elevation"`
			Ip             string `json:"ip"`
			Isp            string `json:"isp"`
			Latitude       string `json:"latitude"`
			Longitude      string `json:"longitude"`
			Province       string `json:"province"`
			Street         string `json:"street"`
			TimeZone       string `json:"time_zone"`
			WeatherStation string `json:"weather_station"`
			ZipCode        string `json:"zip_code"`
		} `json:"location"`
		Proxy struct {
			IsProxy   string `json:"is_proxy"`
			Proxy     string `json:"proxy"`
			ProxyTime string `json:"proxy_time"`
		} `json:"proxy"`
		Scenes struct {
			Asn       string `json:"asn"`
			Isp       string `json:"isp"`
			UsageType string `json:"usage_type"`
		} `json:"scenes"`
	} `json:"data"`
	Msg string `json:"msg"`
}
