
---
title: "Simple PK Analysis with AplosNCA"
author: "Nathan Teuscher"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Simple PK Analysis}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

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

## Introduction

This vignette demonstrates a simple pharmacokinetic (PK) analysis using the Aplos NCA API via the `AplosNCA` package. It calculates PK parameters from concentration-time data.

We'll use example data (`ex1-data.csv`) and configuration (`ex1-analysis.json`) included in the package. The example data included concentration-time data for 10 subjects following administration of an extravascular dose. In practice, replace these with your own files. Note that to use Aplos NCA, you must upload a file to the system, thus if you have a dataframe inside R with the concentration-time data, please write that to a CSV file which can then be uploaded to Aplos NCA.

**Prerequisites**: Set up your credentials in a local file (e.g., `~/.aplos_creds`) as described in `?aplos_get_jwt`. This vignette assumes the package functions are loaded.

```{r load-package}
library(AplosNCA)  # Load the package
```

## Step 1: Load Credentials

Load your Aplos NCA credentials securely from a local file. Do not hardcode them!

```{r load-creds}
# For vignette demonstration (offline), use fake credentials.
# In real use, source your .aplos_creds file.
creds <- list(
  COGNITO_CLIENT_KEY = "fake_key",
  COGNITO_USERNAME = "fake_user",
  COGNITO_PASSWORD = "fake_pass",
  COGNITO_REGION = "us-east-1",
  APLOS_API_URL = "https://api.app.aplos-nca.com"
)
```

## Step 2: Authenticate

Obtain a JWT token for API access.

```{r authenticate}
# Simulated for vignette - in real use, call aplos_get_jwt(creds$COGNITO_CLIENT_KEY, ...)
token <- "fake_token"
url <- creds$APLOS_API_URL
print("Authenticated (simulated)")

```

## Step 3: Upload Input Data

Upload the example PK data file.

```{r upload-data}
# Define your input file
input_file <- system.file("extdata", "ex1-data.csv", package = "AplosNCA")

# Get upload URL
# Simulated - in real use, call aplos_get_upload_url("ex1-data.csv", url, token)
upload_result <- list(data = list(fileId = "fake_file_id"))
print("Upload URL retrieved (simulated)")

# Upload file
# Simulated - in real use, call aplos_upload_file("ex1-data.csv", upload_result, token)
print("File uploaded (simulated)")
```

## Step 4: Load Configurations

Load the analysis configuration (for PK parameter calculation). In this example, we only provide `analysis`; adjust for your needs.

```{r load-configs}
analysis_config_file <- system.file("extdata", "ex1-analysis.json", package = "AplosNCA")
analysis <- readChar(analysis_config_file, file.info(analysis_config_file)$size)

```

## Step 5: Execute Analysis

Submit the analysis for processing.

```{r execute-analysis}
# Simulated - in real use, call aplos_execute_analysis(upload_result, analysis = analysis,url = api_url, 
#                                 token = token, name = "Simple PK Analysis Vignette")
exec_id <- "fake_exec_id"
print("Analysis executed (simulated)")
                                  
```

## Step 6: Check Status

Poll until the analysis is complete.

```{r check-status}
# Simulated polling - assume "succeeded" after delay - in real use, call exec_result <- aplos_execution_status(url = api_url, token = token, execution_id = exec_id, sleep=10)

exec_result <- list(data = list(status = "succeeded"))
print("Execution complete (simulated)")

```

## Step 7: Download and Unzip Results

If succeeded, download and unzip the results.

```{r download-results}
if (exec_result$data$status == "succeeded") {
  # Simulated - in real use, call download_info <- aplos_download_results(url = api_url, token = token, execution_id = exec_id)
  # file_path <- aplos_fetch_results(download_info, dest_dir = "simple", unzip = TRUE)
} else {
  cat("Analysis failed; check status.\n")
}
```

## Conclusion

You've now run a simple PK analysis! Explore the unzipped results for calculated parameters. For more advanced workflows, see other vignettes or the function documentation.

```{r session-info}
sessionInfo()
```
