---
title: "Introduction to inkaR"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Introduction to inkaR}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
    collapse = TRUE,
    comment = "#>"
)
```

## Overview

The `inkaR` package provides a modern, user-friendly interface to access statistical data from the [BBSR INKAR](https://www.inkar.de/) database (Indikatoren und Karten zur Raum- und Stadtentwicklung). 

Key features include:
- **Easy Data Access**: Download data using simple IDs or short codes.
- **Bilingual Support**: Work with metadata in German (default) or English.
- **Offline Search**: Quickly find indicators without needing to query the API repeatedly.
- **Direct Export**: Save data directly to CSV files matching your workflow.

## Installation

You can install the package from your local source or GitHub:

```r
# If installing from local source
devtools::install()
library(inkaR)
```

## 1. Finding Indicators

The INKAR database contains hundreds of indicators. `inkaR` provides tools to find what you need.

### List All Indicators

To see a sortable, searchable list of all available indicators:

```r
# Opens a viewer in RStudio
view_indicators()

# View English metadata
view_indicators(lang = "en")
```

### Search by Text

If you are looking for a specific topic, like "GDP" or "Population":

```r
# Search in English names/descriptions
search_indicators("GDP", lang = "en")

# Search in German (default)
search_indicators("Arbeitslosigkeit")
```

The search results includes the `ID` (Shortname) and `M_ID` which you will need to download data.

## 2. Downloading Data

Use `get_inkar_data()` to fetch statistics. You need:
1. **variable**: The indicator ID (e.g., "011" for GDP).
2. **level**: The spatial level (e.g., "KRE" for Districts/Kreise).

### Basic Download

```r
# Download GDP (011) for Districts (KRE) for the latest available year
df <- get_inkar_data("011", level = "KRE")
head(df)
```

### Specifying Years

You can request a specific year or a range of years:

```r
# Single year
df_2021 <- get_inkar_data("011", level = "KRE", year = 2021)

# Year range
df_range <- get_inkar_data("011", level = "KRE", year = 2015:2020)
```

### Bilingual Output

By default, column names are in German (matching the original source). You can switch to English:

```r
df_en <- get_inkar_data("011", level = "KRE", lang = "en")
# Columns: region_id, region_name, indicator_name, year, value
```

## 3. Exporting Data

You can save the retrieved data directly to a CSV file. The filename is automatically generated based on the indicator name, level, and timestamp.

```r
# Download and save immediately
get_inkar_data("011", level = "KRE", csv = TRUE, export_dir = tempdir())

# Output: Data saved to: inkar_011_KRE_Bruttoinlandsprodukt_....csv
```

## 4. Mapping Data (Geospatial Integration)

`inkaR` includes a built-in wrapper to easily visualize regional data on German administrative maps using the `ggplot2`, `sf`, and `geodata` packages.

If you have those packages installed, you can map Kreise (Districts) or Länder (States) with a single command:

```r
# Download GDP for Kreise
df <- get_inkar_data("011", level = "KRE", year = 2021)

# Plot the data on a map
plot_inkar(df)
```

**Note:** `plot_inkar()` automatically downloads high-quality polygon boundaries from the GADM database on the first run and joins them to your INKAR data using the `Kennziffer` IDs.

## 5. Advanced Features & Architecture

`inkaR` uses advanced engineering to ensure the package is exceptionally fast and resilient:

1. **Persistent Disk Caching (`tools::R_user_dir`)**
   The INKAR API can take 15+ seconds to resolve the spatial dimensions (`SelectLevel`) for a complex indicator (e.g. GDP). 
   `inkaR` queries the API once and caches the configuration to your hard drive permanently. Future R sessions will read this disk-cache in < 0.1 seconds. Caches expire every 24 hours automatically. You can manually reset it using `clear_inkar_cache()`.
2. **Parallel Probing (`httr2::req_perform_parallel`)**
   When `inkaR` queries spatial levels from the server, it dispatches 6 asynchronous requests simultaneously. This concurrent approach slashes wait times from 15 seconds down to under 2 seconds.
3. **Offline Resiliency (`httptest2`)**
   The entire test suite (`testthat`) is fully mocked using `httptest2`. Tests will pass reliably in offline environments (like strict CI/CD servers or airplanes) without depending on the fragile INKAR backend.

## Reference: Spatial Levels

Common spatial levels include:
- `KRE`: Districts (Kreise / Kreisfreie Städte)
- `GEM`: Municipalities (Gemeinden)
- `ROR`: Spatial Planning Regions (Raumordnungsregionen)
- `BLD`: Federal States (Bundesländer)
- `BND`: Federal Territory (Bund)

Use `get_geographies()` to see all available levels.
