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

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

## Install R Package

```{r install_r_packages, eval = FALSE}
# Enable the KWB-R universe repository
options(repos = c(
  kwbr = "https://kwb-r.r-universe.dev",
  CRAN = "https://cloud.r-project.org"
))

# Install R package
install.packages("geosalz.phreeqc")
```

## Tidy Lab Data

```{r tidy_lab_data}
library(geosalz.phreeqc)

file_samples <- geosalz.phreeqc::package_file("phreeqc-input.csv")

samples <- read.csv2(file_samples, check.names = FALSE)

knitr::kable(samples)

samples_tidy <- geosalz.phreeqc::tidy_samples(samples) %>%
  geosalz.phreeqc::convert_to_numeric_lab_values()

samples_tidy
```

## Prepare PHREEQC Input File

```{r prepare_phreeqc_input}
solutions_input <- geosalz.phreeqc::prepare_solutions_input(
  samples_tidy,
  title = "Test Dataset"
)
```

Content of `solutions_input` is shown below:

```{r prepare_phreeqc_input_show, echo = FALSE, comment=NA}
cat(solutions_input)
```

## Run PHREEQC 

```{r run_phreeqc_run, echo = TRUE}

### Load PHREEQC database "phreeqc.dat"
phreeqc::phrLoadDatabaseString(phreeqc::phreeqc.dat)

### Capture PHREEQC output normally sent to output file into a buffer
phreeqc::phrSetOutputStringsOn(TRUE)

## Run PHREEQC with "solutions_input"
phreeqc::phrRunString(input = solutions_input)

### Retrieves the phreeqc output as a character vector
phreeqc_output <- phreeqc::phrGetOutputStrings()
writeLines(phreeqc_output, "phreeqc_output.txt")
```

Here is the content of `phreeqc_output`

```{r prepare_phreeqc_output, echo = FALSE, comment=NA}
cat(paste0(phreeqc_output, collapse = "\n"))
```

## Get Results

```{r run_phreeqc_reusults, echo = TRUE}
sims <- geosalz.phreeqc::read_simulations(phreeqc_output)
str(sims)

sims_list <- geosalz.phreeqc::convert_simulations_to_list(sims)
str(sims_list)
```

## Export to Excel

```{r run_phreeqc_export, echo = TRUE}
openxlsx::write.xlsx(
  x = sims_list,
  file = "phreeqc_output.xlsx",
  overwrite = TRUE
)
```
