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>> {
let decrypted =
decrypt_vault(vault_path, password).map_err(|e| format!("Decryption failed: {e}"))?;
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");
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:
"
);
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())
}