
// worldLocations provides functions to retrieve information about the world's countries and cities.
// All location data is taken from https://github.com/dr5hn/countries-states-cities-database/

package worldLocations

import "seekia/imported/geodist"

import "seekia/internal/encoding"
import "seekia/internal/helpers"

import _ "embed"

import "slices"
import "errors"


//go:embed worldCities.messagepack
var worldCitiesFileBytes []byte

func init(){

	initializeAllCountryObjectsList()
}


// This must be called on startup once
func InitializeWorldLocationsVariables()error{

	var allCityObjectsListForMessagepack []CityObjectForMessagepack

	err := encoding.DecodeMessagePackBytes(false, worldCitiesFileBytes, &allCityObjectsListForMessagepack)
	if (err != nil) { return err }

	allCityObjectsList = make([]CityObject, 0, len(allCityObjectsListForMessagepack))

	for _, cityObjectForMessagepack := range allCityObjectsListForMessagepack {

		cityName := cityObjectForMessagepack.Name
		cityState := cityObjectForMessagepack.State
		cityCountryIdentifier := cityObjectForMessagepack.Country
		cityLatitude := cityObjectForMessagepack.Latitude
		cityLongitude := cityObjectForMessagepack.Longitude

		countryObject, err := GetCountryObjectFromCountryIdentifier(cityCountryIdentifier)
		if (err != nil) { return err }

		cityCountryPrimaryName := countryObject.NamesList[0]

		newCityObject := CityObject{
			Name: cityName,
			State: cityState,
			Country: cityCountryPrimaryName,
			Latitude: cityLatitude,
			Longitude: cityLongitude,
		}

		allCityObjectsList = append(allCityObjectsList, newCityObject)
	}

	allCityObjectsMap = make(map[CoordinatesObject]CityObject)	

	for _, cityObject := range allCityObjectsList{

		cityLatitude := cityObject.Latitude
		cityLongitude := cityObject.Longitude

		coordinatesObject := CoordinatesObject{
			Latitude: cityLatitude,
			Longitude: cityLongitude,
		}

		allCityObjectsMap[coordinatesObject] = cityObject
	}
	
	return nil
}

var allCityObjectsList []CityObject

func getAllCityObjectsList()([]CityObject, error){

	if (allCityObjectsList == nil){
		return nil, errors.New("allCityObjectsList is not initialized.")
	}

	// The list only has to be established once upon startup

	return allCityObjectsList, nil
}

var allCityObjectsMap map[CoordinatesObject]CityObject

func getAllCityObjectsMap()(map[CoordinatesObject]CityObject, error){

	if (allCityObjectsMap == nil){
		return nil, errors.New("getAllCityObjectsMap called when allCityObjectsMap is not initialized.")
	}

	return allCityObjectsMap, nil
}

// This is the format that cities are stored in in the worldCitites.messagepack file
// We store it in this format to save space
type CityObjectForMessagepack struct{
	Name string
	State string

	// This is the country's identifier
	Country int

	Latitude float64
	Longitude float64
}

type CityObject struct{
	Name string
	State string
	Country string
	Latitude float64
	Longitude float64
}

type CoordinatesObject struct{
	Latitude float64
	Longitude float64
}

type CountryObject struct{

	Identifier int
	// The first name in this list is the country's primary name
	NamesList []string
}


//Outputs:
//	-bool: City found (Typically during use, if this is false, the user has entered coordinates manually, which is fine)
//	-string: City name
//	-string: City state
//	-string: City country
//	-error
func GetCityFromCoordinates(locationLatitude float64, locationLongitude float64)(bool, string, string, string, error){

	allCityObjectsMap, err := getAllCityObjectsMap()
	if (err != nil) { return false, "", "", "", err }

	coordinatesObject := CoordinatesObject{

		Latitude: locationLatitude,
		Longitude: locationLongitude,
	}

	cityObject, exists := allCityObjectsMap[coordinatesObject]
	if (exists == false){
		return false, "", "", "", nil
	}

	cityName := cityObject.Name
	cityState := cityObject.State
	cityCountry := cityObject.Country

	return true, cityName, cityState, cityCountry, nil
}


//Outputs:
//	-string: City Name
//	-string: City State
//	-int: City Country Identifier
//	-float64: Kilometers distance from city
//	-error
func GetClosestCityFromCoordinates(locationLatitude float64, locationLongitude float64)(string, string, int, float64, error){

	cityFound, cityName, cityState, cityCountry, err := GetCityFromCoordinates(locationLatitude, locationLongitude)
	if (err != nil) { return "", "", 0, 0, err }
	if (cityFound == true){

		countryIdentifier, err := GetCountryIdentifierFromCountryName(cityCountry)
		if (err != nil){ return "", "", 0, 0, err }

		return cityName, cityState, countryIdentifier, 0, nil
	}

	allCityObjectList, err := getAllCityObjectsList()
	if (err != nil) { return "", "", 0, 0, err }

	closestCityName := ""
	closestCityState := ""
	closestCityCountry := ""
	closestCityKilometersDistance := float64(0)

	for index, cityObject := range allCityObjectList{

		cityName := cityObject.Name
		cityStateName := cityObject.State
		cityCountryName := cityObject.Country

		cityLatitude := cityObject.Latitude
		cityLongitude := cityObject.Longitude

		cityKilometersDistance, err := geodist.GetDistanceBetweenCoordinates(locationLatitude, locationLongitude, cityLatitude, cityLongitude)
		if (err != nil) { return "", "", 0, 0, err }

		if (index == 0 || cityKilometersDistance < closestCityKilometersDistance){
			closestCityName = cityName
			closestCityState = cityStateName
			closestCityCountry = cityCountryName
			closestCityKilometersDistance = cityKilometersDistance
		}
	}

	closestCountryIdentifier, err := GetCountryIdentifierFromCountryName(closestCityCountry)
	if (err != nil){ return "", "", 0, 0, err }

	return closestCityName, closestCityState, closestCountryIdentifier, closestCityKilometersDistance, nil
}

func GetAllCityObjectsInCountry(countryIdentifier int)([]CityObject, error){

	countryObject, err := GetCountryObjectFromCountryIdentifier(countryIdentifier)
	if (err != nil){
		return nil, errors.New("GetAllCityObjectsInCountry failed: " + err.Error())
	}

	countryNamesList := countryObject.NamesList

	allCityObjectsList, err := getAllCityObjectsList()
	if (err != nil) { return nil, err }

	countryCityObjectsList := make([]CityObject, 0)

	for _, cityObject := range allCityObjectsList{
	
		cityCountryName := cityObject.Country

		isWithinCountry := slices.Contains(countryNamesList, cityCountryName)	
		if (isWithinCountry == true){
			countryCityObjectsList = append(countryCityObjectsList, cityObject)
		}
	}

	return countryCityObjectsList, nil
}


// Name should be the primary name
func GetCountryIdentifierFromCountryName(countryName string)(int, error){

	allCountryObjectsList, err := GetAllCountryObjectsList()
	if (err != nil) { return 0, err }	

	for _, countryObject := range allCountryObjectsList{
		
		countryIdentifier := countryObject.Identifier
		countryPrimaryName := countryObject.NamesList[0]

		if (countryName == countryPrimaryName){
			return countryIdentifier, nil
		}
	}

	return 0, errors.New("GetCountryIdentifierFromCountryName called with unknown country name: " + countryName)
}


func GetCountryObjectFromCountryIdentifier(countryIdentifier int)(CountryObject, error){

	allCountryObjectsList, err := GetAllCountryObjectsList()
	if (err != nil) {
		emptyObject := CountryObject{}
		return emptyObject, err
	}

	for _, countryObject := range allCountryObjectsList{
		
		currentCountryIdentifier := countryObject.Identifier

		if (countryIdentifier == currentCountryIdentifier){
			return countryObject, nil
		}
	}

	emptyObject := CountryObject{}
	countryIdentifierString := helpers.ConvertIntToString(countryIdentifier)
	return emptyObject, errors.New("GetCountryObjectFromCountryIdentifier called with unknown country identifier: " + countryIdentifierString)
}

func VerifyCountryIdentifier(inputIdentifier int)bool{

	if (inputIdentifier >= 1 && inputIdentifier <= 219){
		return true
	}

	return false
}


// The countries list does not contain all of the country names from the original cities.json file from which worldCities.messagepack is created
// All countries within the worldCities.messagepack file must exist within the country objects list.

// Countries are defined as being within the jurisdiction of a particular government.
// Users can use the countries filters to filter out other users who may live nearby, but are not in the country they are in.
// This is useful because there may be restrictions on travel and living that would make mating more difficult.
// Most users who do not live near a border should only rely on the Distance filter to find users who are nearby.

// Any time the countries list is updated, a new profile version must be created.

var allCountryObjectsList []CountryObject

func GetAllCountryObjectsList()([]CountryObject, error){

	if (allCountryObjectsList == nil){
		return nil, errors.New("allCountryObjectsList is not initialized.")
	}

	return allCountryObjectsList, nil
}

func initializeAllCountryObjectsList(){

	countryObject_1 := CountryObject{

		Identifier: 1,
		NamesList: []string{"Afghanistan"},
	}

	countryObject_2 := CountryObject{

		Identifier: 2,
		NamesList: []string{"Aland Islands"},
	}
	
	countryObject_3 := CountryObject{

		Identifier: 3,
		NamesList: []string{"Albania"},
	}

	countryObject_4 := CountryObject{

		Identifier: 4,
		NamesList: []string{"Algeria"},
	}

	countryObject_5 := CountryObject{

		Identifier: 5,
		NamesList: []string{"Andorra"},
	}

	countryObject_6 := CountryObject{

		Identifier: 6,
		NamesList: []string{"Angola"},
	}

	countryObject_7 := CountryObject{

		Identifier: 7,
		NamesList: []string{"Anguilla"},
	}

	countryObject_8 := CountryObject{

		Identifier: 8,
		NamesList: []string{"Antarctica"},
	}

	countryObject_9 := CountryObject{

		Identifier: 9,
		NamesList: []string{"Antigua And Barbuda"},
	}

	countryObject_10 := CountryObject{

		Identifier: 10,
		NamesList: []string{"Argentina"},
	}

	countryObject_11 := CountryObject{

		Identifier: 11,
		NamesList: []string{"Armenia"},
	}

	countryObject_12 := CountryObject{

		Identifier: 12,
		NamesList: []string{"Aruba"},
	}

	countryObject_13 := CountryObject{

		Identifier: 13,
		NamesList: []string{"Australia"},
	}

	countryObject_14 := CountryObject{

		Identifier: 14,
		NamesList: []string{"Austria"},
	}

	countryObject_15 := CountryObject{

		Identifier: 15,
		NamesList: []string{"Azerbaijan"},
	}

	countryObject_16 := CountryObject{

		Identifier: 16,
		NamesList: []string{"Bangladesh"},
	}

	countryObject_17 := CountryObject{

		Identifier: 17,
		NamesList: []string{"Bahrain"},
	}

	countryObject_18 := CountryObject{

		Identifier: 18,
		NamesList: []string{"Barbados"},
	}

	countryObject_19 := CountryObject{

		Identifier: 19,
		NamesList: []string{"Belarus"},
	}

	countryObject_20 := CountryObject{

		Identifier: 20,
		NamesList: []string{"Belgium"},
	}

	countryObject_21 := CountryObject{

		Identifier: 21,
		NamesList: []string{"Belize"},
	}

	countryObject_22 := CountryObject{

		Identifier: 22,
		NamesList: []string{"Benin"},
	}

	countryObject_23 := CountryObject{

		Identifier: 23,
		NamesList: []string{"Bhutan"},
	}

	countryObject_24 := CountryObject{

		Identifier: 24,
		NamesList: []string{"Bolivia"},
	}

	countryObject_25 := CountryObject{

		Identifier: 25,
		NamesList: []string{"Bonaire"},
	}

	countryObject_26 := CountryObject{

		Identifier: 26,
		NamesList: []string{"Bosnia and Herzegovina"},
	}

	countryObject_27 := CountryObject{

		Identifier: 27,
		NamesList: []string{"Botswana"},
	}

	countryObject_28 := CountryObject{

		Identifier: 28,
		NamesList: []string{"Brazil"},
	}

	countryObject_29 := CountryObject{

		Identifier: 29,
		NamesList: []string{"British Indian Ocean Territory"},
	}

	countryObject_30 := CountryObject{

		Identifier: 30,
		NamesList: []string{"Brunei"},
	}

	countryObject_31 := CountryObject{

		Identifier: 31,
		NamesList: []string{"Bulgaria"},
	}

	countryObject_32 := CountryObject{

		Identifier: 32,
		NamesList: []string{"Burkina Faso"},
	}

	countryObject_33 := CountryObject{

		Identifier: 33,
		NamesList: []string{"Burundi"},
	}

	countryObject_34 := CountryObject{

		Identifier: 34,
		NamesList: []string{"Cambodia"},
	}

	countryObject_35 := CountryObject{

		Identifier: 35,
		NamesList: []string{"Cameroon"},
	}

	countryObject_36 := CountryObject{

		Identifier: 36,
		NamesList: []string{"Canada"},
	}

	countryObject_37 := CountryObject{

		Identifier: 37,
		NamesList: []string{"Cape Verde"},
	}

	countryObject_38 := CountryObject{

		Identifier: 38,
		NamesList: []string{"Cayman Islands"},
	}

	countryObject_39 := CountryObject{

		Identifier: 39,
		NamesList: []string{"Central African Republic"},
	}

	countryObject_40 := CountryObject{

		Identifier: 40,
		NamesList: []string{"Chad"},
	}

	countryObject_41 := CountryObject{

		Identifier: 41,
		NamesList: []string{"Chile"},
	}

	countryObject_42 := CountryObject{

		Identifier: 42,
		NamesList: []string{"China"},
	}

	countryObject_43 := CountryObject{

		Identifier: 43,
		NamesList: []string{"Christmas Island"},
	}

	countryObject_44 := CountryObject{

		Identifier: 44,
		NamesList: []string{"Colombia"},
	}

	countryObject_45 := CountryObject{

		Identifier: 45,
		NamesList: []string{"Comoros"},
	}

	countryObject_46 := CountryObject{

		Identifier: 46,
		NamesList: []string{"Congo"},
	}

	countryObject_47 := CountryObject{

		Identifier: 47,
		NamesList: []string{"Costa Rica"},
	}

	countryObject_48 := CountryObject{

		Identifier: 48,
		NamesList: []string{"Cote D'Ivoire"},
	}

	countryObject_49 := CountryObject{

		Identifier: 49,
		NamesList: []string{"Croatia"},
	}

	countryObject_50 := CountryObject{

		Identifier: 50,
		NamesList: []string{"Cuba"},
	}

	countryObject_51 := CountryObject{

		Identifier: 51,
		NamesList: []string{"Curaçao"},
	}

	countryObject_52 := CountryObject{

		Identifier: 52,
		NamesList: []string{"Cyprus"},
	}

	countryObject_53 := CountryObject{

		Identifier: 53,
		NamesList: []string{"Czech Republic"},
	}

	countryObject_54 := CountryObject{

		Identifier: 54,
		NamesList: []string{"Democratic Republic of the Congo"},
	}

	countryObject_55 := CountryObject{

		Identifier: 55,
		NamesList: []string{"Denmark"},
	}

	countryObject_56 := CountryObject{

		Identifier: 56,
		NamesList: []string{"Djibouti"},
	}

	countryObject_57 := CountryObject{

		Identifier: 57,
		NamesList: []string{"Dominica"},
	}

	countryObject_58 := CountryObject{

		Identifier: 58,
		NamesList: []string{"Dominican Republic"},
	}

	countryObject_59 := CountryObject{

		Identifier: 59,
		NamesList: []string{"East Timor", "Timor-Leste"},
	}

	countryObject_60 := CountryObject{

		Identifier: 60,
		NamesList: []string{"Ecuador"},
	}

	countryObject_61 := CountryObject{

		Identifier: 61,
		NamesList: []string{"Egypt"},
	}

	countryObject_62 := CountryObject{

		Identifier: 62,
		NamesList: []string{"El Salvador"},
	}

	countryObject_63 := CountryObject{

		Identifier: 63,
		NamesList: []string{"Equatorial Guinea"},
	}

	countryObject_64 := CountryObject{

		Identifier: 64,
		NamesList: []string{"Eritrea"},
	}

	countryObject_65 := CountryObject{

		Identifier: 65,
		NamesList: []string{"Estonia"},
	}

	countryObject_66 := CountryObject{

		Identifier: 66,
		NamesList: []string{"Ethiopia"},
	}

	countryObject_67 := CountryObject{

		Identifier: 67,
		NamesList: []string{"Falkland Islands"},
	}

	countryObject_68 := CountryObject{

		Identifier: 68,
		NamesList: []string{"Fiji Islands"},
	}

	countryObject_69 := CountryObject{

		Identifier: 69,
		NamesList: []string{"Finland"},
	}

	countryObject_70 := CountryObject{

		Identifier: 70,
		NamesList: []string{"France"},
	}

	countryObject_71 := CountryObject{

		Identifier: 71,
		NamesList: []string{"Gabon"},
	}

	countryObject_72 := CountryObject{

		Identifier: 72,
		NamesList: []string{"Gambia"},
	}

	countryObject_73 := CountryObject{

		Identifier: 73,
		NamesList: []string{"Georgia"},
	}

	countryObject_74 := CountryObject{

		Identifier: 74,
		NamesList: []string{"Germany"},
	}

	countryObject_75 := CountryObject{

		Identifier: 75,
		NamesList: []string{"Ghana"},
	}

	countryObject_76 := CountryObject{

		Identifier: 76,
		NamesList: []string{"Greece"},
	}

	countryObject_77 := CountryObject{

		Identifier: 77,
		NamesList: []string{"Greenland"},
	}

	countryObject_78 := CountryObject{

		Identifier: 78,
		NamesList: []string{"Grenada"},
	}

	countryObject_79 := CountryObject{

		Identifier: 79,
		NamesList: []string{"Guatemala"},
	}

	countryObject_80 := CountryObject{

		Identifier: 80,
		NamesList: []string{"Guinea"},
	}

	countryObject_81 := CountryObject{

		Identifier: 81,
		NamesList: []string{"Guinea-Bissau"},
	}

	countryObject_82 := CountryObject{

		Identifier: 82,
		NamesList: []string{"Guyana"},
	}

	countryObject_83 := CountryObject{

		Identifier: 83,
		NamesList: []string{"Haiti"},
	}

	countryObject_84 := CountryObject{

		Identifier: 84,
		NamesList: []string{"Honduras"},
	}

	countryObject_85 := CountryObject{

		Identifier: 85,
		NamesList: []string{"Hungary"},
	}

	countryObject_86 := CountryObject{

		Identifier: 86,
		NamesList: []string{"Iceland"},
	}

	countryObject_87 := CountryObject{

		Identifier: 87,
		NamesList: []string{"India"},
	}

	countryObject_88 := CountryObject{

		Identifier: 88,
		NamesList: []string{"Indonesia"},
	}

	countryObject_89 := CountryObject{

		Identifier: 89,
		NamesList: []string{"Iran"},
	}

	countryObject_90 := CountryObject{

		Identifier: 90,
		NamesList: []string{"Iraq"},
	}

	countryObject_91 := CountryObject{

		Identifier: 91,
		NamesList: []string{"Ireland"},
	}

	countryObject_92 := CountryObject{

		Identifier: 92,
		NamesList: []string{"Israel"},
	}

	countryObject_93 := CountryObject{

		Identifier: 93,
		NamesList: []string{"Italy"},
	}

	countryObject_94 := CountryObject{

		Identifier: 94,
		NamesList: []string{"Jamaica"},
	}

	countryObject_95 := CountryObject{

		Identifier: 95,
		NamesList: []string{"Japan"},
	}

	countryObject_96 := CountryObject{

		Identifier: 96,
		NamesList: []string{"Jersey"},
	}

	countryObject_97 := CountryObject{

		Identifier: 97,
		NamesList: []string{"Jordan"},
	}

	countryObject_98 := CountryObject{

		Identifier: 98,
		NamesList: []string{"Kazakhstan"},
	}

	countryObject_99 := CountryObject{

		Identifier: 99,
		NamesList: []string{"Kenya"},
	}

	countryObject_100 := CountryObject{

		Identifier: 100,
		NamesList: []string{"Kiribati"},
	}

	countryObject_101 := CountryObject{

		Identifier: 101,
		NamesList: []string{"Kosovo"},
	}

	countryObject_102 := CountryObject{

		Identifier: 102,
		NamesList: []string{"Kuwait"},
	}

	countryObject_103 := CountryObject{

		Identifier: 103,
		NamesList: []string{"Kyrgyzstan"},
	}

	countryObject_104 := CountryObject{

		Identifier: 104,
		NamesList: []string{"Laos"},
	}

	countryObject_105 := CountryObject{

		Identifier: 105,
		NamesList: []string{"Latvia"},
	}

	countryObject_106 := CountryObject{

		Identifier: 106,
		NamesList: []string{"Lebanon"},
	}

	countryObject_107 := CountryObject{

		Identifier: 107,
		NamesList: []string{"Lesotho"},
	}

	countryObject_108 := CountryObject{

		Identifier: 108,
		NamesList: []string{"Liberia"},
	}

	countryObject_109 := CountryObject{

		Identifier: 109,
		NamesList: []string{"Libya"},
	}

	countryObject_110 := CountryObject{

		Identifier: 110,
		NamesList: []string{"Liechtenstein"},
	}

	countryObject_111 := CountryObject{

		Identifier: 111,
		NamesList: []string{"Lithuania"},
	}

	countryObject_112 := CountryObject{

		Identifier: 112,
		NamesList: []string{"Luxembourg"},
	}

	countryObject_113 := CountryObject{

		Identifier: 113,
		NamesList: []string{"North Macedonia"},
	}

	countryObject_114 := CountryObject{

		Identifier: 114,
		NamesList: []string{"Madagascar"},
	}

	countryObject_115 := CountryObject{

		Identifier: 115,
		NamesList: []string{"Malawi"},
	}

	countryObject_116 := CountryObject{

		Identifier: 116,
		NamesList: []string{"Malaysia"},
	}

	countryObject_117 := CountryObject{

		Identifier: 117,
		NamesList: []string{"Maldives"},
	}

	countryObject_118 := CountryObject{

		Identifier: 118,
		NamesList: []string{"Mali"},
	}

	countryObject_119 := CountryObject{

		Identifier: 119,
		NamesList: []string{"Malta"},
	}

	countryObject_120 := CountryObject{

		Identifier: 120,
		NamesList: []string{"Isle of Man"},
	}

	countryObject_121 := CountryObject{

		Identifier: 121,
		NamesList: []string{"Marshall Islands"},
	}

	countryObject_122 := CountryObject{

		Identifier: 122,
		NamesList: []string{"Mauritania"},
	}

	countryObject_123 := CountryObject{

		Identifier: 123,
		NamesList: []string{"Mauritius"},
	}

	countryObject_124 := CountryObject{

		Identifier: 124,
		NamesList: []string{"Mexico"},
	}

	countryObject_125 := CountryObject{

		Identifier: 125,
		NamesList: []string{"Micronesia"},
	}

	countryObject_126 := CountryObject{

		Identifier: 126,
		NamesList: []string{"Moldova"},
	}

	countryObject_127 := CountryObject{

		Identifier: 127,
		NamesList: []string{"Monaco"},
	}

	countryObject_128 := CountryObject{

		Identifier: 128,
		NamesList: []string{"Mongolia"},
	}

	countryObject_129 := CountryObject{

		Identifier: 129,
		NamesList: []string{"Montenegro"},
	}

	countryObject_130 := CountryObject{

		Identifier: 130,
		NamesList: []string{"Morocco"},
	}

	countryObject_131 := CountryObject{

		Identifier: 131,
		NamesList: []string{"Mozambique"},
	}

	countryObject_132 := CountryObject{

		Identifier: 132,
		NamesList: []string{"Myanmar"},
	}

	countryObject_133 := CountryObject{

		Identifier: 133,
		NamesList: []string{"Namibia"},
	}

	countryObject_134 := CountryObject{

		Identifier: 134,
		NamesList: []string{"Nauru"},
	}

	countryObject_135 := CountryObject{

		Identifier: 135,
		NamesList: []string{"Nepal"},
	}

	countryObject_136 := CountryObject{

		Identifier: 136,
		NamesList: []string{"Netherlands"},
	}

	countryObject_137 := CountryObject{

		Identifier: 137,
		NamesList: []string{"New Caledonia"},
	}

	countryObject_138 := CountryObject{

		Identifier: 138,
		NamesList: []string{"New Zealand"},
	}

	countryObject_139 := CountryObject{

		Identifier: 139,
		NamesList: []string{"Nicaragua"},
	}

	countryObject_140 := CountryObject{

		Identifier: 140,
		NamesList: []string{"Niger"},
	}

	countryObject_141 := CountryObject{

		Identifier: 141,
		NamesList: []string{"Nigeria"},
	}

	countryObject_142 := CountryObject{

		Identifier: 142,
		NamesList: []string{"Niue"},
	}

	countryObject_143 := CountryObject{

		Identifier: 143,
		NamesList: []string{"North Korea"},
	}

	countryObject_144 := CountryObject{

		Identifier: 144,
		NamesList: []string{"Norway"},
	}

	countryObject_145 := CountryObject{

		Identifier: 145,
		NamesList: []string{"Oman"},
	}

	countryObject_146 := CountryObject{

		Identifier: 146,
		NamesList: []string{"Pakistan"},
	}

	countryObject_147 := CountryObject{

		Identifier: 147,
		NamesList: []string{"Palau"},
	}

	countryObject_148 := CountryObject{

		Identifier: 148,
		NamesList: []string{"Panama"},
	}

	countryObject_149 := CountryObject{

		Identifier: 149,
		NamesList: []string{"Papua New Guinea"},
	}

	countryObject_150 := CountryObject{

		Identifier: 150,
		NamesList: []string{"Paraguay"},
	}

	countryObject_151 := CountryObject{

		Identifier: 151,
		NamesList: []string{"Peru"},
	}

	countryObject_152 := CountryObject{

		Identifier: 152,
		NamesList: []string{"Philippines"},
	}

	countryObject_153 := CountryObject{

		Identifier: 153,
		NamesList: []string{"Poland"},
	}

	countryObject_154 := CountryObject{

		Identifier: 154,
		NamesList: []string{"Portugal"},
	}

	countryObject_155 := CountryObject{

		Identifier: 155,
		NamesList: []string{"Puerto Rico"},
	}

	countryObject_156 := CountryObject{

		Identifier: 156,
		NamesList: []string{"Qatar"},
	}

	countryObject_157 := CountryObject{

		Identifier: 157,
		NamesList: []string{"Romania"},
	}

	countryObject_158 := CountryObject{

		Identifier: 158,
		NamesList: []string{"Russia"},
	}

	countryObject_159 := CountryObject{

		Identifier: 159,
		NamesList: []string{"Rwanda"},
	}

	countryObject_160 := CountryObject{

		Identifier: 160,
		NamesList: []string{"Saint Kitts And Nevis"},
	}

	countryObject_161 := CountryObject{

		Identifier: 161,
		NamesList: []string{"Saint Lucia"},
	}

	countryObject_162 := CountryObject{

		Identifier: 162,
		NamesList: []string{"Saint Pierre and Miquelon"},
	}

	countryObject_163 := CountryObject{

		Identifier: 163,
		NamesList: []string{"Saint Vincent And The Grenadines"},
	}

	countryObject_164 := CountryObject{

		Identifier: 164,
		NamesList: []string{"Saint-Martin"},
	}

	countryObject_165 := CountryObject{

		Identifier: 165,
		NamesList: []string{"Samoa"},
	}

	countryObject_166 := CountryObject{

		Identifier: 166,
		NamesList: []string{"San Marino"},
	}

	countryObject_167 := CountryObject{

		Identifier: 167,
		NamesList: []string{"Sao Tome and Principe"},
	}

	countryObject_168 := CountryObject{

		Identifier: 168,
		NamesList: []string{"Saudi Arabia"},
	}

	countryObject_169 := CountryObject{

		Identifier: 169,
		NamesList: []string{"Senegal"},
	}

	countryObject_170 := CountryObject{

		Identifier: 170,
		NamesList: []string{"Serbia"},
	}

	countryObject_171 := CountryObject{

		Identifier: 171,
		NamesList: []string{"Seychelles"},
	}

	countryObject_172 := CountryObject{

		Identifier: 172,
		NamesList: []string{"Sierra Leone"},
	}

	countryObject_173 := CountryObject{

		Identifier: 173,
		NamesList: []string{"Singapore"},
	}

	countryObject_174 := CountryObject{

		Identifier: 174,
		NamesList: []string{"Sint Maarten"},
	}

	countryObject_175 := CountryObject{

		Identifier: 175,
		NamesList: []string{"Slovakia"},
	}

	countryObject_176 := CountryObject{

		Identifier: 176,
		NamesList: []string{"Slovenia"},
	}

	countryObject_177 := CountryObject{

		Identifier: 177,
		NamesList: []string{"Solomon Islands"},
	}

	countryObject_178 := CountryObject{

		Identifier: 178,
		NamesList: []string{"Somalia"},
	}

	countryObject_179 := CountryObject{

		Identifier: 179,
		NamesList: []string{"South Africa"},
	}

	countryObject_180 := CountryObject{

		Identifier: 180,
		NamesList: []string{"South Korea"},
	}

	countryObject_181 := CountryObject{

		Identifier: 181,
		NamesList: []string{"South Sudan"},
	}

	countryObject_182 := CountryObject{

		Identifier: 182,
		NamesList: []string{"Spain"},
	}

	countryObject_183 := CountryObject{

		Identifier: 183,
		NamesList: []string{"Sri Lanka"},
	}

	countryObject_184 := CountryObject{

		Identifier: 184,
		NamesList: []string{"Sudan"},
	}

	countryObject_185 := CountryObject{

		Identifier: 185,
		NamesList: []string{"Suriname"},
	}

	countryObject_186 := CountryObject{

		Identifier: 186,
		NamesList: []string{"Eswatini", "Swaziland"},
	}

	countryObject_187 := CountryObject{

		Identifier: 187,
		NamesList: []string{"Sweden"},
	}

	countryObject_188 := CountryObject{

		Identifier: 188,
		NamesList: []string{"Switzerland"},
	}

	countryObject_189 := CountryObject{

		Identifier: 189,
		NamesList: []string{"Syria"},
	}

	countryObject_190 := CountryObject{

		Identifier: 190,
		NamesList: []string{"Taiwan"},
	}

	countryObject_191 := CountryObject{

		Identifier: 191,
		NamesList: []string{"Tajikistan"},
	}

	countryObject_192 := CountryObject{

		Identifier: 192,
		NamesList: []string{"Tanzania"},
	}

	countryObject_193 := CountryObject{

		Identifier: 193,
		NamesList: []string{"Thailand"},
	}

	countryObject_194 := CountryObject{

		Identifier: 194,
		NamesList: []string{"The Bahamas"},
	}

	countryObject_195 := CountryObject{

		Identifier: 195,
		NamesList: []string{"Togo"},
	}

	countryObject_196 := CountryObject{

		Identifier: 196,
		NamesList: []string{"Tonga"},
	}

	countryObject_197 := CountryObject{

		Identifier: 197,
		NamesList: []string{"Trinidad And Tobago"},
	}

	countryObject_198 := CountryObject{

		Identifier: 198,
		NamesList: []string{"Tunisia"},
	}

	countryObject_199 := CountryObject{

		Identifier: 199,
		NamesList: []string{"Turkey"},
	}

	countryObject_200 := CountryObject{

		Identifier: 200,
		NamesList: []string{"Turkmenistan"},
	}

	countryObject_201 := CountryObject{

		Identifier: 201,
		NamesList: []string{"Turks And Caicos Islands"},
	}

	countryObject_202 := CountryObject{

		Identifier: 202,
		NamesList: []string{"Tuvalu"},
	}

	countryObject_203 := CountryObject{

		Identifier: 203,
		NamesList: []string{"Uganda"},
	}

	countryObject_204 := CountryObject{

		Identifier: 204,
		NamesList: []string{"Ukraine"},
	}

	countryObject_205 := CountryObject{

		Identifier: 205,
		NamesList: []string{"United Arab Emirates"},
	}

	countryObject_206 := CountryObject{

		Identifier: 206,
		NamesList: []string{"United Kingdom"},
	}

	countryObject_207 := CountryObject{

		Identifier: 207,
		NamesList: []string{"United States"},
	}

	countryObject_208 := CountryObject{

		Identifier: 208,
		NamesList: []string{"Uruguay"},
	}

	countryObject_209 := CountryObject{

		Identifier: 209,
		NamesList: []string{"Uzbekistan"},
	}

	countryObject_210 := CountryObject{

		Identifier: 210,
		NamesList: []string{"Vanuatu"},
	}

	countryObject_211 := CountryObject{

		Identifier: 211,
		NamesList: []string{"Vatican City State"},
	}

	countryObject_212 := CountryObject{

		Identifier: 212,
		NamesList: []string{"Venezuela"},
	}

	countryObject_213 := CountryObject{

		Identifier: 213,
		NamesList: []string{"Vietnam"},
	}

	countryObject_214 := CountryObject{

		Identifier: 214,
		NamesList: []string{"British Virgin Islands"},
	}

	countryObject_215 := CountryObject{

		Identifier: 215,
		NamesList: []string{"Wallis And Futuna Islands"},
	}

	countryObject_216 := CountryObject{

		Identifier: 216,
		NamesList: []string{"Yemen"},
	}

	countryObject_217 := CountryObject{

		Identifier: 217,
		NamesList: []string{"Zambia"},
	}

	countryObject_218 := CountryObject{

		Identifier: 218,
		NamesList: []string{"Zimbabwe"},
	}

	countryObject_219 := CountryObject{

		Identifier: 219,
		NamesList: []string{"Bermuda"},
	}

	allCountryObjectsList = []CountryObject{ countryObject_1, countryObject_2, countryObject_3, countryObject_4, countryObject_5, countryObject_6, countryObject_7, countryObject_8, countryObject_9, countryObject_10, countryObject_11, countryObject_12, countryObject_13, countryObject_14, countryObject_15, countryObject_16, countryObject_17, countryObject_18, countryObject_19, countryObject_20, countryObject_21, countryObject_22, countryObject_23, countryObject_24, countryObject_25, countryObject_26, countryObject_27, countryObject_28, countryObject_29, countryObject_30, countryObject_31, countryObject_32, countryObject_33, countryObject_34, countryObject_35, countryObject_36, countryObject_37, countryObject_38, countryObject_39, countryObject_40, countryObject_41, countryObject_42, countryObject_43, countryObject_44, countryObject_45, countryObject_46, countryObject_47, countryObject_48, countryObject_49, countryObject_50, countryObject_51, countryObject_52, countryObject_53, countryObject_54, countryObject_55, countryObject_56, countryObject_57, countryObject_58, countryObject_59, countryObject_60, countryObject_61, countryObject_62, countryObject_63, countryObject_64, countryObject_65, countryObject_66, countryObject_67, countryObject_68, countryObject_69, countryObject_70, countryObject_71, countryObject_72, countryObject_73, countryObject_74, countryObject_75, countryObject_76, countryObject_77, countryObject_78, countryObject_79, countryObject_80, countryObject_81, countryObject_82, countryObject_83, countryObject_84, countryObject_85, countryObject_86, countryObject_87, countryObject_88, countryObject_89, countryObject_90, countryObject_91, countryObject_92, countryObject_93, countryObject_94, countryObject_95, countryObject_96, countryObject_97, countryObject_98, countryObject_99, countryObject_100, countryObject_101, countryObject_102, countryObject_103, countryObject_104, countryObject_105, countryObject_106, countryObject_107, countryObject_108, countryObject_109, countryObject_110, countryObject_111, countryObject_112, countryObject_113, countryObject_114, countryObject_115, countryObject_116, countryObject_117, countryObject_118, countryObject_119, countryObject_120, countryObject_121, countryObject_122, countryObject_123, countryObject_124, countryObject_125, countryObject_126, countryObject_127, countryObject_128, countryObject_129, countryObject_130, countryObject_131, countryObject_132, countryObject_133, countryObject_134, countryObject_135, countryObject_136, countryObject_137, countryObject_138, countryObject_139, countryObject_140, countryObject_141, countryObject_142, countryObject_143, countryObject_144, countryObject_145, countryObject_146, countryObject_147, countryObject_148, countryObject_149, countryObject_150, countryObject_151, countryObject_152, countryObject_153, countryObject_154, countryObject_155, countryObject_156, countryObject_157, countryObject_158, countryObject_159, countryObject_160, countryObject_161, countryObject_162, countryObject_163, countryObject_164, countryObject_165, countryObject_166, countryObject_167, countryObject_168, countryObject_169, countryObject_170, countryObject_171, countryObject_172, countryObject_173, countryObject_174, countryObject_175, countryObject_176, countryObject_177, countryObject_178, countryObject_179, countryObject_180, countryObject_181, countryObject_182, countryObject_183, countryObject_184, countryObject_185, countryObject_186, countryObject_187, countryObject_188, countryObject_189, countryObject_190, countryObject_191, countryObject_192, countryObject_193, countryObject_194, countryObject_195, countryObject_196, countryObject_197, countryObject_198, countryObject_199, countryObject_200, countryObject_201, countryObject_202, countryObject_203, countryObject_204, countryObject_205, countryObject_206, countryObject_207, countryObject_208, countryObject_209, countryObject_210, countryObject_211, countryObject_212, countryObject_213, countryObject_214, countryObject_215, countryObject_216, countryObject_217, countryObject_218, countryObject_219}
}



