vios_app 0.1.1

Small JSON vaults: Argon2id + AES-GCM, with optional AAD binding.
Documentation
//! pdf_exporter.rs — Vault → PDF
//! Enable with: `--features pdf`. Without it, this module returns a clear error.

use std::error::Error;

#[cfg(feature = "pdf")]
use {
    crate::pdf::simple_writer::SimplePdfWriter,
    crate::vault::vault_crypto::decrypt_vault,
    chrono::{DateTime, Utc},
};

#[cfg(feature = "pdf")]
pub fn export_vault_to_pdf(
    vault_path: &str,
    password: &str,
    output_path: &str,
) -> Result<(), Box<dyn Error>> {
    // Decrypt the vault
    let decrypted =
        decrypt_vault(vault_path, password).map_err(|e| format!("Decryption failed: {e}"))?;

    // Extract metadata
    let md = &decrypted.metadata;
    let created_at: DateTime<Utc> = md
        .created_at
        .parse()
        .map_err(|_| "Invalid datetime format in `created_at`")?;
    let creator = md.creator_name.as_str();
    let fingerprint = md.system_fingerprint.as_str();
    let tone = md.tone_classification.as_deref().unwrap_or("unknown");
    let intent = md.intent_classification.as_deref().unwrap_or("unknown");
    let reem = md.reem_code.as_deref().unwrap_or("REEM-XXX");
    let cia = md.cia_hash.as_deref().unwrap_or("CIA-UNKNOWN");

    // Header block
    let header = format!(
        "🔒 Vault Creator: {creator}
Created At: {created_at}
System Fingerprint: {fingerprint}
Tone: {tone}
Intent: {intent}
REEM Code: {reem}
CIA Hash: {cia}

Decrypted Vault Memory:
"
    );

    // PDF
    let mut pdf = SimplePdfWriter::new("Vault Export", 11.0_f32, (20.0, 20.0, 20.0, 20.0))?;
    pdf.write_wrapped(&header);
    pdf.write_wrapped(&decrypted.content);
    pdf.save(output_path)?;

    Ok(())
}

#[cfg(not(feature = "pdf"))]
pub fn export_vault_to_pdf(
    _vault_path: &str,
    _password: &str,
    _output_path: &str,
) -> Result<(), Box<dyn Error>> {
    Err("pdf feature is disabled; build with `--features pdf` to enable PDF export".into())
}