Data Loading and Merging

library(leaflet)
library(dplyr)
library(sf)
library(maps)

us_states <- st_as_sf(maps::map("state", plot = FALSE, fill = TRUE))
energy_data <- read.csv("EnergyDataOrig.csv")

# Merge with spatial data
us_energy <- merge(us_states, energy_data, by = "ID")

#Creating Color Palettes

pal_total <- colorNumeric("YlOrRd", domain = us_energy$Total.Production)
pal_imports <- colorNumeric("RdYlBu", domain = us_energy$Net.Energy.Production)
pal_renewable <- colorNumeric("Greens", domain = us_energy$Renewables.Production)
pal_coal <- colorNumeric("Blues", domain = us_energy$Coal.Production)
pal_petroleum <- colorNumeric("Reds", domain = us_energy$Petroleum.Production)
pal_nuclear <- colorNumeric("Purples", domain = us_energy$Nuclear.Production)
pal_gas <- colorNumeric("Greys", domain = us_energy$Natural.Gas.Production)

#Creating the Map

energy_map <- leaflet(us_energy) %>%
  addTiles() %>%
  
  # Total Production Layer
  addPolygons(
    group = "Total Production (Billion Btu)",
    fillColor = ~pal_total(Total.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Total Production (Billion Btu):", round(Total.Production))
  ) %>%
  
  # Individual Energy Source Layers
  addPolygons(
    group = "Coal Production (%)",
    fillColor = ~pal_coal(Coal.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Coal Production Percentage:", round(Coal.Production), "%")
  ) %>%
  
  addPolygons(
    group = "Natural Gas Production (%)",
    fillColor = ~pal_gas(Natural.Gas.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Natural Gas Production Percentage:", round(Natural.Gas.Production), "%")
  ) %>%
  
  addPolygons(
    group = "Petroleum Production (%)",
    fillColor = ~pal_petroleum(Petroleum.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Petroleum Production Percentage:", round(Petroleum.Production), "%")
  ) %>%
  
  addPolygons(
    group = "Nuclear Production (%)",
    fillColor = ~pal_nuclear(Nuclear.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Nuclear Production Percentage:", round(Nuclear.Production), "%")
  ) %>%
  
  addPolygons(
    group = "Renewable Production (%)",
    fillColor = ~pal_renewable(Renewables.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Renewable:", round(Renewables.Production), "%")
  ) %>%
  
  addPolygons(
    group = "Net Imports (Production - Consumption) (Billion Btu)",
    fillColor = ~pal_imports(Net.Energy.Production),
    fillOpacity = 0.8,
    color = "white",
    weight = 1,
    label = ~paste(State, "Net Imports (Billion Btu):", round(Net.Energy.Production))
  ) %>%
  
  # Layer control with more options
  addLayersControl(
    baseGroups = c(
      "Total Production (Billion Btu)", 
      "Coal Production (%)", 
      "Natural Gas Production (%)", 
      "Petroleum Production (%)", 
      "Nuclear Production (%)", 
      "Renewable Production (%)",
      "Net Imports (Production - Consumption) (Billion Btu)"
    ),
    options = layersControlOptions(collapsed = TRUE)
  ) %>%
  
  # Add scale bar
  addScaleBar(position = "bottomleft") %>%
  
  # Set view
  setView(lng = -98.5795, lat = 39.8283, zoom = 4) %>%
  addMiniMap(toggleDisplay = FALSE)

# Display the comprehensive map
energy_map

```