# Load necessary libraries
library(dplyr)
library(ggplot2)

# Download and load the dataset
fileUrl <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
if (!file.exists("StormData.csv.bz2")) {
  download.file(fileUrl, destfile = "StormData.csv.bz2", method = "curl")
}

stormData <- read.csv("StormData.csv.bz2")

# Impact on Population Health
healthImpact <- stormData %>%
  group_by(EVTYPE) %>%
  summarize(
    fatalities = sum(FATALITIES, na.rm = TRUE),
    injuries = sum(INJURIES, na.rm = TRUE),
    total = fatalities + injuries
  ) %>%
  arrange(desc(total)) %>%
  slice(1:10)

# Plot Health Impact (Top 10 Harmful Events)
print(
  ggplot(healthImpact, aes(x = reorder(EVTYPE, total), y = total)) +
    geom_bar(stat = "identity", fill = "tomato") +
    coord_flip() +
    labs(title = "Top 10 Most Harmful Weather Events (Health)", x = "Event Type", y = "Total Fatalities + Injuries")
)

# Impact on Economy
expMap <- c("K" = 1e3, "M" = 1e6, "B" = 1e9)
stormData$PROPDMGEXP <- toupper(stormData$PROPDMGEXP)
stormData$CROPDMGEXP <- toupper(stormData$CROPDMGEXP)

convertDamage <- function(dmg, exp) {
  val <- expMap[exp]
  val[is.na(val)] <- 0
  return(dmg * val)
}

stormData$propDamage <- convertDamage(stormData$PROPDMG, stormData$PROPDMGEXP)
stormData$cropDamage <- convertDamage(stormData$CROPDMG, stormData$CROPDMGEXP)
stormData$totalDamage <- stormData$propDamage + stormData$cropDamage

economicImpact <- stormData %>%
  group_by(EVTYPE) %>%
  summarize(totalDamage = sum(totalDamage, na.rm = TRUE)) %>%
  arrange(desc(totalDamage)) %>%
  slice(1:10)

# Plot Economic Impact (Top 10 Costliest Events)
print(
  ggplot(economicImpact, aes(x = reorder(EVTYPE, totalDamage), y = totalDamage / 1e9)) +
    geom_bar(stat = "identity", fill = "steelblue") +
    coord_flip() +
    labs(title = "Top 10 Most Costly Weather Events", x = "Event Type", y = "Total Damage (Billion USD)")
)