## ----setup, echo = FALSE------------------------------------------------------
knitr::opts_chunk$set(
  fig.width = 12,
  fig.height = 10,
  fig.align = "center",
  warning = FALSE,
  message = FALSE
)

file_heart <- system.file("tests_vignette_rds", "heart_dat.RDS", package = "fitbitViz")
file_sleep <- system.file("tests_vignette_rds", "sleep_ts.RDS", package = "fitbitViz")
file_tcx <- system.file("tests_vignette_rds", "res_tcx.RDS", package = "fitbitViz")
file_rst <- system.file("tests_vignette_rds", "raysh_rst.tif", package = "fitbitViz")

heart_dat <- readRDS(file = file_heart)
sleep_ts <- readRDS(file = file_sleep)
res_tcx <- readRDS(file = file_tcx)
raysh_rst <- raster::raster(x = file_rst)

## -----------------------------------------------------------------------------
WEEK <- 11 # for this use case pick the 11th week of the year 2021

weeks_2021 <- fitbitViz:::split_year_in_weeks(year = 2021) # split a year in weeks

# Start the week at monday (see: https://github.com/tidyverse/lubridate/issues/509)
date_start <- lubridate::floor_date(lubridate::ymd(weeks_2021[WEEK]), unit = "weeks") + 1

# Add 6 days to the 'date_start' variable to come to a 7-days plot
date_end <- date_start + 6

sleep_time_begins <- "00H 40M 0S"
sleep_time_ends <- "08H 00M 0S"

VERBOSE <- FALSE # disable verbosity

## ----echo = TRUE, out.height = '1000px', eval = FALSE-------------------------
# # .......................
# # heart rate time series
# # .......................
# 
# heart_dat <- fitbitViz::heart_rate_time_series(
#   heart_rate_intraday_list = heart_dat$heart_rate_intraday,
#   heart_rate = heart_dat$heart_rate,
#   detail_level = "1min",
#   ggplot_intraday = TRUE,
#   ggplot_ncol = 2,
#   ggplot_nrow = 4,
#   verbose = VERBOSE
# )
# heart_dat$plt

## ----echo = FALSE-------------------------------------------------------------
# ...............................................
# DT::datatable() as option to download the data  [ heart rate time series ]
# ...............................................

dt_heart_rate_data <- data.table::rbindlist(heart_dat$heart_rate_intraday)

dt_heart_rate <- DT::datatable(
  data = dt_heart_rate_data,
  rownames = FALSE,
  extensions = "Buttons",
  options = list(
    pageLength = 10,
    dom = "Bfrtip",
    buttons = list(list(
      extend = "csv",
      filename = "heart_rate_time_series"
    ))
  )
)
dt_heart_rate

## ----echo = TRUE, out.height = '1000px', eval = FALSE-------------------------
# # ............................
# # heart rate intraday heatmap [ plot options: https://yihui.org/knitr/options/#plots ]
# # ............................
# 
# heart_intra <- heart_dat$heart_rate_intraday
# 
# hrt_heat <- fitbitViz::heart_rate_heatmap(
#   heart_rate_intraday_data = heart_intra,
#   angle_x_axis = 0
# )
# hrt_heat

## ----echo = TRUE, eval = FALSE------------------------------------------------
# # .......................
# # heart rate variability
# # .......................
# 
# hrt_rt_var <- fitbitViz::fitbit_data_type_by_date(
#   data = heart_dat,
#   type = "hrv",
#   plot = TRUE
# )

## ----echo = TRUE, out.height = '1000px', eval = FALSE-------------------------
# # .......................
# # sleep data time series
# # .......................
# 
# sleep_ts <- fitbitViz::sleep_time_series(
#   sleep_data_list = sleep_ts,
#   ggplot_color_palette = "ggsci::blue_material",
#   ggplot_ncol = 2,
#   ggplot_nrow = 4,
#   verbose = VERBOSE
# )
# sleep_ts$plt_lev_segments

## ----echo = FALSE-------------------------------------------------------------
# .....................................
# DT::datatable() of the sleep heatmap
# .....................................

dt_sleep_heatmap <- DT::datatable(
  data = sleep_ts$heatmap_data,
  rownames = FALSE,
  extensions = "Buttons",
  options = list(
    pageLength = 10,
    dom = "Bfrtip",
    buttons = list(list(
      extend = "csv",
      filename = "sleep_heat_map"
    ))
  )
)

dt_sleep_heatmap

## ----echo = TRUE, eval = FALSE------------------------------------------------
# # ....................................................
# # return the gps-tcx data.table from an exported .tcx file
# # ....................................................
# 
# res_tcx <- fitbitViz::GPS_TCX_data(
#   tcx_file = "/path/to/activity.tcx",
#   time_zone = "Europe/Athens",
#   verbose = VERBOSE
# )
# # res_tcx

## ----echo = TRUE--------------------------------------------------------------
# ................................
# Create the Leaflet / LeafGL Map
# ................................

res_lft <- fitbitViz::leafGL_point_coords(
  dat_gps_tcx = res_tcx,
  color_points_column = "AltitudeMeters",
  provider = leaflet::providers$Esri.WorldImagery,
  option_viewer = rstudioapi::viewer,
  CRS = 4326
)

## ----echo = TRUE--------------------------------------------------------------
res_lft

## ----echo = FALSE-------------------------------------------------------------
# .................................
# DT::datatable() for the GPS data
# .................................

dt_gps_tcx <- DT::datatable(
  data = res_tcx,
  rownames = FALSE,
  extensions = "Buttons",
  class = "white-space: nowrap", # unwrap the column-contents so that rows become flat, see:  https://github.com/rstudio/DT/issues/353
  options = list(
    pageLength = 10,
    dom = "Bfrtip",
    buttons = list(list(
      extend = "csv",
      filename = "GPS_TCX_data"
    ))
  )
)

dt_gps_tcx

## ----echo = FALSE, eval = FALSE-----------------------------------------------
# # reference for the st_buffer function:  https://stackoverflow.com/a/54754935

## ----echo = TRUE--------------------------------------------------------------
# ...................................................
# compute the sf-object buffer and the raster-extend  (1000 meters buffer)
# ...................................................

sf_rst_ext <- fitbitViz::extend_AOI_buffer(
  dat_gps_tcx = res_tcx,
  buffer_in_meters = 1000,
  CRS = 4326,
  verbose = VERBOSE
)
# sf_rst_ext

## ----echo = TRUE, eval = FALSE------------------------------------------------
# # ..................................................................
# # Download the Copernicus DEM 30m elevation data
# # there is also the option to download the DEM 90m elevation data
# # which is of lower resolution but the image size is smaller which
# # means faster download
# # ..................................................................
# 
# dem_dir <- tempdir()
# # dem_dir
# 
# dem30 <- CopernicusDEM::aoi_geom_save_tif_matches(
#   sf_or_file = sf_rst_ext$sfc_obj,
#   dir_save_tifs = dem_dir,
#   resolution = 30,
#   crs_value = 4326,
#   threads = parallel::detectCores(),
#   verbose = VERBOSE
# )
# 
# TIF <- list.files(dem_dir, pattern = ".tif", full.names = T)
# # TIF
# 
# if (length(TIF) > 1) {
#   # ....................................................
#   # create a .VRT file if I have more than 1 .tif files
#   # ....................................................
# 
#   file_out <- file.path(dem_dir, "VRT_mosaic_FILE.vrt")
# 
#   vrt_dem30 <- CopernicusDEM::create_VRT_from_dir(
#     dir_tifs = dem_dir,
#     output_path_VRT = file_out,
#     verbose = VERBOSE
#   )
# }
# 
# if (length(TIF) == 1) {
#   # ..................................................
#   # if I have a single .tif file keep the first index
#   # ..................................................
# 
#   file_out <- TIF[1]
# }
# 
# # .......................................
# # crop the elevation DEM based on the
# # coordinates extent of the GPS-CTX data
# # .......................................
# 
# raysh_rst <- fitbitViz::crop_DEM(
#   tif_or_vrt_dem_file = file_out,
#   sf_buffer_obj = sf_rst_ext$sfc_obj,
#   verbose = VERBOSE
# )
# # terra::plot(raysh_rst)

## ----echo = TRUE--------------------------------------------------------------
linestring_dat <- fitbitViz::gps_lat_lon_to_LINESTRING(
  dat_gps_tcx = res_tcx,
  CRS = 4326,
  time_split_asc_desc = NULL,
  verbose = VERBOSE
)

## ----echo = TRUE--------------------------------------------------------------
idx_3m <- c(
  which.min(res_tcx$AltitudeMeters),
  as.integer(length(res_tcx$AltitudeMeters) / 2),
  which.max(res_tcx$AltitudeMeters)
)

cols_3m <- c("latitude", "longitude", "AltitudeMeters")
dat_3m <- res_tcx[idx_3m, ..cols_3m]

## ----echo = TRUE, eval = FALSE------------------------------------------------
# # .....................................................
# # Conversion of the 'SpatRaster' to a raster object
# # because the 'rayshader' package accepts only rasters
# # .....................................................
# 
# rst_obj <- raster::raster(raysh_rst)
# raster::projection(rst_obj) <- terra::crs(raysh_rst, proj = TRUE)
# 
# 
# snapshot_rayshader_path <- file.path(tempdir(), "rayshader_img.png")
# 
# rgl::open3d(useNULL = TRUE) # this removes the second rgl-popup-window
# 
# fitbitViz::rayshader_3d_DEM(
#   rst_buf = rst_obj,
#   rst_ext = sf_rst_ext$raster_obj_extent,
#   linestring_ASC_DESC = linestring_dat,
#   elevation_sample_points = dat_3m,
#   zoom = 0.3,
#   windowsize = c(1000, 800),
#   add_shadow_rescale_original = FALSE,
#   verbose = TRUE
# )
# 
# rgl::rgl.snapshot(snapshot_rayshader_path)
# rgl::par3d(mouseMode = "trackball") # options: c("trackball", "polar", "zoom", "selecting")
# rgl::rglwidget()

