library(ggplot2)
library(plotly)
library(dplyr)
library(readr)
nba_data <- read_csv("nbastats.csv", locale = locale(encoding = "UTF-8"))
nba_data$Player <- iconv(nba_data$Player, from = "latin1", to = "UTF-8")



nba_data <- nba_data %>%
  mutate(
    Rank_PER = rank(-`PER?`, ties.method = "min"),  # Higher PER = better rank
    Rank_WS = rank(-WS, ties.method = "min"),       # Higher WS = better rank
    Rank_BPM = rank(-BPM, ties.method = "min"),     # Higher BPM = better rank
    Rank_VORP = rank(-VORP, ties.method = "min"),   # Higher VORP = better rank
    Avg_Rank = (Rank_PER + Rank_WS + Rank_BPM + Rank_VORP) / 4  # Average rank
  )


fig <- plot_ly(nba_data, x = ~`USG%`) %>%
  

  add_trace(y = ~`PER?`, type = 'scatter', mode = 'markers', name = 'PER',
            text = ~paste("Player: ", Player, "<br>PER: ", `PER?`, "<br>USG%: ", `USG%`),
            hoverinfo = "text", visible = TRUE) %>%
  
  
  add_trace(y = ~WS, type = 'scatter', mode = 'markers', name = 'WS',
            text = ~paste("Player: ", Player, "<br>WS: ", WS, "<br>USG%: ", `USG%`),
            hoverinfo = "text", visible = FALSE) %>%
  
  
  add_trace(y = ~BPM, type = 'scatter', mode = 'markers', name = 'BPM',
            text = ~paste("Player: ", Player, "<br>BPM: ", BPM, "<br>USG%: ", `USG%`),
            hoverinfo = "text", visible = FALSE) %>%
  
  
  add_trace(y = ~VORP, type = 'scatter', mode = 'markers', name = 'VORP',
            text = ~paste("Player: ", Player, "<br>VORP: ", VORP, "<br>USG%: ", `USG%`),
            hoverinfo = "text", visible = FALSE) %>%
  
  
  add_trace(y = ~Avg_Rank, type = 'scatter', mode = 'markers', name = 'Avg Rank',
            text = ~paste("Player: ", Player, "<br>Avg Rank: ", round(Avg_Rank, 2), "<br>USG%: ", `USG%`),
            hoverinfo = "text", visible = FALSE) %>%
  
  layout(
    title = "NBA Advanced Stats vs. Usage Rate",
    xaxis = list(title = "Usage Rate (%)"),
    yaxis = list(title = "Metric Value"),  # Default title
    updatemenus = list(
      list(
        buttons = list(
          list(label = "PER", method = "update", 
               args = list(list(visible = c(TRUE, FALSE, FALSE, FALSE, FALSE)), 
                           list(yaxis = list(title = "Player Efficiency Rating (PER)"), 
                                title = "Player Efficiency Rating (PER) vs. USG%"))),
          
          list(label = "WS", method = "update", 
               args = list(list(visible = c(FALSE, TRUE, FALSE, FALSE, FALSE)), 
                           list(yaxis = list(title = "Win Shares (WS)"), 
                                title = "Win Shares (WS) vs. USG%"))),
          
          list(label = "BPM", method = "update", 
               args = list(list(visible = c(FALSE, FALSE, TRUE, FALSE, FALSE)), 
                           list(yaxis = list(title = "Box Plus-Minus (BPM)"), 
                                title = "Box Plus-Minus (BPM) vs. USG%"))),
          
          list(label = "VORP", method = "update", 
               args = list(list(visible = c(FALSE, FALSE, FALSE, TRUE, FALSE)), 
                           list(yaxis = list(title = "Value Over Replacement Player (VORP)"), 
                                title = "Value Over Replacement Player (VORP) vs. USG%"))),
          
          list(label = "Avg Rank", method = "update", 
               args = list(list(visible = c(FALSE, FALSE, FALSE, FALSE, TRUE)), 
                           list(yaxis = list(title = "Average Rank (Lower is Better)", autorange = "reversed"), 
                                title = "Average Rank of Advanced Stats vs. USG%")))
        ),
        direction = "down",
        x = 1.1,
        xanchor = "left",
        y = 1.2,
        yanchor = "top"
      )
    )
  )

fig