urban_data <- data.frame()

my_funct <- function(city){
data_get <- GET(paste0("https://api.teleport.org/api/urban_areas/slug%3A", city,"/scores/"))

data_convert <- fromJSON(rawToChar(data_get$content))
 
data_clean <- data_convert$categories %>% 
  mutate(color = city)
}

#cities is just a simple data frame with city name, lat, long (for plotting final data)
mappy_boi <- pmap(cities, ~my_funct(.x)) 

#I did this for my lab and it worked but when i tried to use it for this it was cbinding it and dropping the city so it was USELESS, luckily I know how to do loops

#data_boi <- data.frame(matrix(unlist(mappy_boi), nrow= length(mappy_boi), byrow=T), stringsAsFactors=FALSE)

#cute loop
for(i in 1:37){
 urban_data <- rbind(urban_data,mappy_boi[[i]])
}

#cleaning up data
urban_data <- urban_data %>% rename(City = color , Category = name  , Rating = score_out_of_10) %>% filter( Category %in% c("Housing", "Cost of Living", "Safety", "Healthcare", "Education", "Environmental Quality", "Economy")) %>% pivot_wider(names_from = Category, values_from = Rating)

#more cleaning
final_data <- cbind(urban_data, cities)
final_data <- final_data[-9]
names(final_data)<-str_replace_all(names(final_data), c(" " = "_" , "," = "" ))
final_data$City <- final_data$City %>%
  str_replace_all(pattern = "-", " ") %>%
  str_to_title() 
#making an icon (it looks like an eye lol)
eye_con <- makeIcon(iconUrl = "https://i.dlpng.com/static/png/6865249_preview.png", iconWidth = 25, iconHeight = 25)

#plot
leaflet() %>%
  addTiles() %>%
  addMarkers(lng = jitter(final_data$long, factor = 2), lat = jitter(final_data$lat), label = final_data$City, popup = paste0( "Cost of Living: ", format(final_data$Cost_of_Living, digits = 3), "<br>","<br>", "Quality of Life Ratings:" , "<br>", "<br>","Housing: ", format(final_data$Housing, digits = 3), "<br>","Safety: ", format(final_data$Safety,digits = 3) , "<br>", "Healthcare: ", format(final_data$Healthcare, digits = 3),  "<br>", "Education: ", format(final_data$Education, digits = 3), "<br>", "Environmental Quality: ", format(final_data$Environmental_Quality, digits = 3),  "<br>", "Economy: ", format(final_data$Economy, digits = 3) ),  icon = eye_con) %>% addProviderTiles(providers$CartoDB.Positron)