use std::path::Path;
use lithair_core::engine::events::EventStore;
pub fn run(data_dir: &Path) -> i32 {
let path = data_dir.to_string_lossy();
if !data_dir.exists() {
eprintln!("verify: data directory does not exist: {}", path);
return 2;
}
let store = match EventStore::new(&path) {
Ok(s) => s,
Err(e) => {
eprintln!("verify: failed to open event store at {}: {}", path, e);
return 2;
}
};
let result = match store.verify_chain() {
Ok(r) => r,
Err(e) => {
eprintln!("verify: chain verification failed to run at {}: {}", path, e);
return 2;
}
};
println!("Event store: {}", path);
println!(" total events: {}", result.total_events);
println!(" verified: {}", result.verified_events);
if result.legacy_events > 0 {
println!(" legacy (no hash):{}", result.legacy_events);
}
println!(" invalid hashes: {}", result.invalid_hashes.len());
println!(" broken links: {}", result.broken_links.len());
if result.is_valid {
println!("Result: OK — {}", result.summary());
0
} else {
if let Some(first) = result.invalid_hashes.first() {
println!(
" first bad hash: index {} (event_id {})",
first.event_index, first.event_id
);
}
if let Some(first) = result.broken_links.first() {
println!(
" first broken link: index {} (event_id {})",
first.event_index, first.event_id
);
}
println!("Result: INVALID — {}", result.summary());
1
}
}