## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(diseasystore)

## ----hidden_options, include = FALSE------------------------------------------
if (rlang::is_installed("withr")) {
  withr::local_options("tibble.print_min" = 5)
  withr::local_options("tibble.print_max" = 5)
  withr::local_options("diseasystore.verbose" = FALSE)
  withr::local_options("diseasystore.DiseasystoreGoogleCovid19.n_max" = 1000)
} else {
  opts <- options(
    "tibble.print_min" = 5,
    "tibble.print_max" = 5,
    "diseasystore.verbose" = FALSE,
    "diseasystore.DiseasystoreGoogleCovid19.n_max" = 1000
  )
}

# We have a "hard" dependency for duckdb to render parts of this vignette
suggests_available <- rlang::is_installed("duckdb")
not_on_cran <- interactive() || as.logical(Sys.getenv("NOT_CRAN", unset = "false"))

## ----available_diseasystores--------------------------------------------------
available_diseasystores()

## ----google_setup_hidden, include = FALSE, eval = suggests_available && not_on_cran----
# The files we need are stored remotely in Google's API
google_files <- c("by-age.csv", "demographics.csv", "index.csv", "weather.csv")
remote_conn <- diseasyoption("remote_conn", "DiseasystoreGoogleCovid19")

# In practice, it is best to make a local copy of the data which is
# stored in the "vignette_data" folder.
# This folder can either be in the package folder
# (preferred, please create the folder) or in the tempdir().
local_conn <- purrr::detect(
  "vignette_data",
  checkmate::test_directory_exists,
  .default = tempdir()
)

# Then we download the first n rows of each data set of interest
try({
  purrr::discard(
    google_files,
    ~ checkmate::test_file_exists(file.path(local_conn, .))
  ) |>
    purrr::walk(\(file) {
      paste0(remote_conn, file) |>
        readr::read_csv(n_max = 1000, show_col_types = FALSE, progress = FALSE) |>
        readr::write_csv(file.path(local_conn, file))
    })
})

# Check that the files are available after attempting to download
files_missing <- purrr::some(
  google_files,
  ~ !checkmate::test_file_exists(file.path(local_conn, .))
)

if (files_missing) {
  data_available <- FALSE
} else {
  data_available <- TRUE
}

ds <- DiseasystoreGoogleCovid19$new(target_conn = DBI::dbConnect(duckdb::duckdb()),
                                    source_conn = local_conn,
                                    start_date = as.Date("2020-03-01"),
                                    end_date = as.Date("2020-03-15"))

## ----google_setup, eval = FALSE, eval = not_on_cran && suggests_available && data_available----
ds <- DiseasystoreGoogleCovid19$new(
  target_conn = DBI::dbConnect(duckdb::duckdb()),
  start_date = as.Date("2020-03-01"),
  end_date = as.Date("2020-03-15")
)

## ----google_available_features, eval = not_on_cran && suggests_available && data_available----
ds$available_features

## ----google_get_feature_example_1, eval = not_on_cran && suggests_available && data_available----
ds$get_feature("n_hospital")

## ----google_get_feature_example_2, eval = not_on_cran && suggests_available && data_available----
ds$get_feature("n_hospital",
               start_date = as.Date("2020-03-01"),
               end_date = as.Date("2020-03-02"))

## ----available_observables, eval = not_on_cran && suggests_available && data_available----
ds$available_observables

## ----available_stratifications, eval = not_on_cran && suggests_available && data_available----
ds$available_stratifications

## ----google_key_join_features_example_1, eval = not_on_cran && suggests_available && data_available----
ds$key_join_features(observable = "n_hospital",
                     stratification = NULL)

## ----google_key_join_features_example_2, eval = not_on_cran && suggests_available && data_available----
ds$key_join_features(observable = "n_hospital",
                     stratification = rlang::quos(country_id))

## ----google_key_join_features_example_3, eval = not_on_cran && suggests_available && data_available----
ds$key_join_features(observable = "n_hospital",
                     stratification = rlang::quos(country_id,
                                                  old = age_group == "90+"))

## ----drop_diseasystore_example_1, eval = not_on_cran && suggests_available && data_available----
SCDB::get_tables(ds$target_conn, show_temporary = FALSE)

## ----drop_diseasystore_example_2, eval = not_on_cran && suggests_available && data_available----
drop_diseasystore(conn = ds$target_conn)

SCDB::get_tables(ds$target_conn, show_temporary = FALSE)

## ----diseasyoption_list-------------------------------------------------------
diseasyoption()

## ----diseasyoption_example_1--------------------------------------------------
diseasyoption("source_conn", class = "DiseasystoreGoogleCovid19")

## ----diseasyoption_example_2--------------------------------------------------
diseasyoption("source_conn", class = "DiseasystoreDiseaseY")

## ----diseasyoption_example_3--------------------------------------------------
options("diseasystore.source_conn" = file.path("local", "path"))
diseasyoption("source_conn", class = "DiseasystoreDiseaseY")

## ----diseasyoption_example_4--------------------------------------------------
diseasyoption(
  "non_existent",
  class = "DiseasystoreDiseaseY",
  .default = "final fallback"
)

## ----cleanup, include = FALSE-------------------------------------------------
if (exists("ds")) rm(ds)
gc()
if (!rlang::is_installed("withr")) {
  options(opts)
}

