library(shinydashboard)
library(shiny)

setScienceIfNot("Spotify_Stream_Count", subProj="shinyApp", verbose=TRUE)
sourceSupportFns(srcOther("Spotify Playlist Webscrape"), fail.on.missing=TRUE)

options("snowflake_inuse" = FALSE)


server <- function(input, output) {
  set.seed(122)
  histdata <- rnorm(500)

  token <- get_spotify_API_token(verbose=TRUE)

  output$plot1 <- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
  })

  output$playlist_tracks <- renderPlot({
    uri.user <- input$playlist.url
    cat("USER INPUTED:  ", uri.user, "\n")
    DT.playlist <- get_playlist_data(uri=uri.user) %>% setnames_removePreface("playlist")
    first_N_tracks <- 80
    title <- DT.playlist[, sprintf("%s playlist\nNumber of Streams by Track Number\nbetween %s ~ %s UTC\n(First %i tracks only)", name, min(tmstamp), max(tmstamp), first_N_tracks)]
    title <- sprintf("Track Counts for playlist\n'%s'", uri.user)
    DT.plot <- DT.playlist[!is.na(track_number_in_playlist), list(total_streams_per_track=unique(total_streams_per_track)), by=c("artist_track", "track_number_in_playlist")]
    DT.plot <- DT.plot[track_number_in_playlist <= first_N_tracks]
    setkeyIfNot(DT.plot, track_number_in_playlist, verbose=FALSE)

    DT.plot[, perc.drop_off_after_each_track := diffNA(total_streams_per_track, FALSE) / total_streams_per_track]

    DT.plot[, fifth := seq(.N) %% 5 == 0]
    DT.plot[, artist_track := reverseFactor(artist_track)]
    P <- ggBarchart2(DT.plot, x="artist_track", y="total_streams_per_track", width=1.2, title=title, geom="bar", alpha=0.5, fill="fifth", color=NULL, position="stack") + angledtext(0, 0) + relativetext(1, 0.5) + coord_flip()
    print(P)
  })
}


