####################################################################
### --------------- FUNCTIONS FOR DATAVIEWS APP ---------------- ###
####################################################################
#
# getVariableInfo() 
#   - retrieves information for a given data variable, outputs list
#
# findBioregion()
#   - retrieves formatted bioregion name for a given MPA
#
# loadVariable() 
#   - loads data based on specified mpa, variable, and spatial scale
#
# createDataFilename()
#   - generates filename for data download 
#
####################################################################

# Libraries

library(tidyverse)
library(lubridate)

####################################################################
####################################################################

getVariableInfo <- function(variable_name, variable_ref = "../data/data_variable_list.csv") {
  
  selected_variable <- read_csv(variable_ref) %>%
    filter(VARIABLE_NAME == variable_name)
  
  variable_info <- list("variable_id" = selected_variable$VARIABLE_ID,
                        "variable_name" = selected_variable$VARIABLE_NAME,
                        "variable_source" = selected_variable$VARIABLE_SOURCE,
                        "variable_axis" = selected_variable$AXIS_LABEL
  )
  
  return(variable_info)
}

####################################################################

findBioregion <- function(mpa_name, site_ref = "../data/MPA_list.csv") {
  
  # load reference list
  mpa_list = read_csv(site_ref)
  
  # identify MPA bioregion
  bioregion_name = mpa_list$BIOREGION[mpa_list$MPA_NAME == mpa_name] %>%
    gsub("Co", " Co", .) %>% 
    gsub("I", " I", .) %>%
    paste0(.," Bioregion")
  
  # output bioregion name
  return(bioregion_name)
  
  
}
  
  
####################################################################

loadVariable = function(mpa_name, data_variable, spatial_scale, site_ref = "../data/MPA_list.csv") {
  
  # build string of filepath from the input variables
  # load and filter the dataset (determine which bioregion the MPA is in)

  # filepath = paste0("CeNCOOS Data Views/dataview-prototype/data/", data_variable, "/", data_variable, "_", spatial_scale, ".csv") # for test code
  filepath = paste0("../data/", data_variable, "/", data_variable, "_", spatial_scale, ".csv") # for shiny app
  
  # load data file
  datafile = read_csv(filepath)
  
  # load reference list
  mpa_list = read_csv(site_ref)
  
  # identify MPA bioregion
  bioregion_name = mpa_list$BIOREGION[mpa_list$MPA_NAME == mpa_name]
  
  # filter date to the specified MPA or biorgion
  if (spatial_scale == "indiv-mpas"){
    
    filtered_data = datafile %>% 
      filter(area == mpa_name)
    
  } else if (spatial_scale == "comb-mpas") {
    
    filtered_data = datafile %>%
      filter(area == paste0(bioregion_name, "_MPAs"))
    
  } else if (spatial_scale == "bioregions") {
    
    filtered_data = datafile %>%
      filter(area == bioregion_name)
  }
  
  # format everything as a date-time, if it is currently just a year
  # should this be done at the processing stage or can I just make things into years here?
  
  if ("year" %in% names(filtered_data)) {
    
    filtered_data <- filtered_data %>%
      mutate(date = ymd(paste0(as.character(year), "0701"))) %>%
      select(-year) 
  }
  
  filtered_data <- filtered_data %>%
    select(date, area, everything())
  
  return(filtered_data)
  
}


####################################################################

# Function to generate filenames for download function

createDataFilename <- function(mpa_name, variable_name, date_range_input){
  filename <- paste0(mpa_name, "_",
                    getVariableInfo(variable_name = variable_name)$variable_id, "_",
                    date(date_range_input[1]), "_",
                    date(date_range_input[2]),
                    ".csv") %>%
    gsub(" ", "-",.) %>%
    tolower(.)
  
  return(filename)
}