#[cfg(not(feature = "pdf"))]
fn main() {}
#[cfg(feature = "pdf")]
mod app {
use std::{env, error::Error, fs::File, io::BufWriter};
use vios_core::vault::vault_crypto::decrypt_vault;
use vios_core::vault::vault_structs::VaultPayload;
use vios_core::vault::vault_utils::{extend_payload, extract_reflection_line};
use vios_core::vaultseal_utils::append_seal;
use printpdf::{BuiltinFont, Mm, PdfDocument};
pub fn run() -> Result<(), Box<dyn Error>> {
let args: Vec<String> = env::args().collect();
if args.len() < 3 {
eprintln!("Usage: pdf_exporter <vault_file> <password>");
std::process::exit(1);
}
let vault_path = &args[1];
let password = &args[2];
append_seal(vault_path);
let decrypted: VaultPayload = decrypt_vault(vault_path, password)?;
let _extended = extend_payload(&decrypted.content);
let reflection_line = extract_reflection_line(&decrypted.content);
let (doc, page1, layer1) =
PdfDocument::new("Vault Certificate", Mm(210.0), Mm(297.0), "Layer 1");
let current_layer = doc.get_page(page1).get_layer(layer1);
let font = doc.add_builtin_font(BuiltinFont::Helvetica)?;
let preview = decrypted
.content
.lines()
.take(5)
.collect::<Vec<_>>()
.join("\n");
let text = format!(
"📜 VIOS Vault Certificate\n\n\
🔐 Path: {vault_path}\n\
🧬 REEM Code: {}\n\
🪞 Reflection: {}\n\
🧠 Preview:\n{}\n\n\
🕒 Timestamp: {}\n\
🔒 Hash: {}\n",
decrypted
.metadata
.reem_code
.clone()
.unwrap_or_else(|| "N/A".to_string()),
reflection_line,
preview,
decrypted.metadata.created_at,
decrypted
.metadata
.cia_hash
.clone()
.unwrap_or_else(|| "N/A".to_string()),
);
current_layer.use_text(text, 12.0, Mm(10.0), Mm(280.0), &font);
let output_file = format!("{vault_path}_certificate.pdf");
let mut buffer = BufWriter::new(File::create(&output_file)?);
doc.save(&mut buffer)?;
println!("✅ Vault certificate saved to: {output_file}");
Ok(())
}
}
#[cfg(feature = "pdf")]
fn main() -> Result<(), Box<dyn std::error::Error>> {
app::run()
}