vios_app 0.1.1

Small JSON vaults: Argon2id + AES-GCM, with optional AAD binding.
Documentation
use crate::pdf::simple_writer::SimplePdfWriter;
use crate::vault::vault_structs::VaultPayload;
use chrono::{DateTime, Utc};

pub fn export_vault_as_pdf(payload: &VaultPayload, output_path: &str) -> Result<(), String> {
    let md = &payload.metadata;

    // Parse or default metadata fields
    let created_at: DateTime<Utc> = md
        .created_at
        .parse()
        .map_err(|_| "Invalid created_at datetime".to_string())?;
    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");

    // Build 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}

Encrypted Vault Memory:
"
    );

    // Write PDF (A4, 11pt, 20mm margins)
    let mut pdf =
        SimplePdfWriter::new("Vault Contract Export", 11.0_f32, (20.0, 20.0, 20.0, 20.0))?;

    pdf.write_wrapped(&header);
    pdf.write_wrapped(&payload.content);

    pdf.save(output_path)
}