library(shiny)
library(leaflet)
library(dplyr)
library(readr)

# Load live earthquake data from USGS
get_quakes <- function() {
  url <- "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv"
  read_csv(url, show_col_types = FALSE) |>
    filter(!is.na(latitude), !is.na(longitude), !is.na(mag)) |>
    mutate(popup = paste0(
      "<strong>Magnitude:</strong> ", mag, "<br>",
      "<strong>Depth:</strong> ", depth, " km<br>",
      "<strong>Location:</strong> ", place
    ))
}

ui <- fluidPage(
  titlePanel("🌍 Earthquake Explorer"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("magRange", "Minimum Magnitude:", min = 0, max = 10, value = 4, step = 0.1),
      actionButton("reload", "Reload Data 🔁"),
      helpText("Data: USGS, past 30 days")
    ),
    mainPanel(
      leafletOutput("quakeMap", height = 600)
    )
  )
)

server <- function(input, output, session) {
  quake_data <- reactiveVal(get_quakes())
  
  observeEvent(input$reload, {
    quake_data(get_quakes())
  })
  
  output$quakeMap <- renderLeaflet({
    df <- quake_data() |> filter(mag >= input$magRange)
    
    leaflet(df) |>
      addTiles() |>
      addCircleMarkers(
        lng = ~longitude, lat = ~latitude,
        radius = ~mag * 2,
        color = ~ifelse(mag >= 6, "red", ifelse(mag >= 5, "orange", "blue")),
        stroke = FALSE, fillOpacity = 0.6,
        popup = ~popup
      ) |>
      setView(lng = 0, lat = 20, zoom = 2)
  })
}

shinyApp(ui, server)
