## ----echo=FALSE, message=FALSE, warning=FALSE---------------------------------
library(CEOdata)
library(tibble)
library(dplyr)
library(haven)
library(stringr)

example_path <- function(filename) {
  system.file("extdata", filename, package = "CEOdata", mustWork = TRUE)
}

acc_meta <- readRDS(example_path("accumulated_meta_example.rds"))
meta <- readRDS(example_path("REO_meta_example.rds"))

to_factor_tibble <- function(path) {
  haven::read_sav(path) |>
    tibble::as_tibble() |>
    dplyr::mutate(
      dplyr::across(
        where(~ inherits(.x, "haven_labelled")),
        haven::as_factor
      )
    )
}

to_raw_tibble <- function(path) {
  haven::read_sav(path) |>
    tibble::as_tibble()
}

d <- to_factor_tibble(example_path("BOP_presencial_example.sav"))
d_raw <- to_raw_tibble(example_path("BOP_presencial_example.sav"))
d1145 <- to_factor_tibble(example_path("d1145_example.sav"))
d1145_raw <- to_raw_tibble(example_path("d1145_example.sav"))

CEOaccumulated_meta <- function(series = NULL, active_only = FALSE) {
  out <- acc_meta
  if (!is.null(series)) {
    out <- out |>
      dplyr::filter(codi_serie %in% series)
  }
  if (isTRUE(active_only) && "estat" %in% names(out)) {
    estat_chr <- tolower(as.character(out$estat))
    out <- out[stringr::str_detect(estat_chr, "\\bactiva\\b") %in% TRUE, , drop = FALSE]
  }
  out
}

CEOmeta <- function(reo = NULL, search = NULL, date_start = NA, date_end = NA, ...) {
  out <- meta
  if (!is.null(reo)) {
    out <- out |>
      dplyr::filter(as.character(REO) %in% as.character(reo))
  } else if (!is.null(search)) {
    cols <- intersect(c("Titol enquesta", "Titol estudi", "Objectius", "Resum", "Descriptors"), names(out))
    if (length(cols) > 0) {
      pattern <- paste(search, collapse = "|")
      out <- out |>
        dplyr::mutate(dplyr::across(dplyr::all_of(cols), ~ tolower(as.character(.x)))) |>
        dplyr::filter(
          dplyr::if_any(
            dplyr::all_of(cols),
            ~ stringr::str_detect(.x, regex(pattern, ignore_case = TRUE))
          )
        )
    }
  }

  start <- suppressWarnings(as.Date(date_start))
  end <- suppressWarnings(as.Date(date_end))
  if (!is.na(start) && "Data d'alta al REO" %in% names(out)) {
    out <- out |>
      dplyr::filter(`Data d'alta al REO` >= start)
  }
  if (!is.na(end) && "Data d'alta al REO" %in% names(out)) {
    out <- out |>
      dplyr::filter(`Data d'alta al REO` <= end)
  }
  out
}

CEOdata <- function(series = "BOP_presencial", reo = NA, raw = FALSE) {
  if (!is.na(reo)) {
    return(if (isTRUE(raw)) d1145_raw else d1145)
  }
  if (!identical(series, "BOP_presencial")) {
    stop(
      "Offline vignette example includes only series = 'BOP_presencial'.",
      call. = FALSE
    )
  }
  if (isTRUE(raw)) d_raw else d
}

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
head(CEOaccumulated_meta())

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
head(unique(CEOaccumulated_meta()$codi_serie))

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
head(CEOaccumulated_meta(series = "BOP_presencial"))

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
d <- CEOdata()
head(d)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
d <- CEOdata(series = "BOP_presencial")
head(d)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
try(CEOdata(series = "Longitudinal"))

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
d_raw <- CEOdata(series = "BOP_presencial", raw = TRUE)
head(d_raw)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
meta <- CEOmeta()
head(meta)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
available <- CEOmeta() |> dplyr::filter(microdata_available)
head(available)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
specific_reo <- CEOmeta(reo = "1145")
head(specific_reo)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
d1145 <- CEOdata(reo = "1145")
head(d1145)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
d1145_raw <- CEOdata(reo = "1145", raw = TRUE)
head(d1145_raw)

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
head(CEOsearch(d1145, keyword = "democràcia"))

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
head(CEOsearch(d1145, keyword = "Catalunya", where = "values"))

## ----echo=TRUE, message=FALSE, warning=FALSE----------------------------------
packageVersion("CEOdata")

