use crate::naorix::naorix_memory::{MemoryTrace, MemoryBank};
use std::collections::HashMap;
use std::path::Path;
fn drift_score(a: &str, b: &str) -> usize {
a.chars().zip(b.chars()).filter(|(x, y)| x != y).count() + a.len().abs_diff(b.len())
}
pub fn analyze_drift(vault_dir: &str) {
let mut all_memories: Vec<MemoryTrace> = Vec::new();
let dir = Path::new(vault_dir);
if !dir.exists() {
eprintln!("❌ Vault directory not found: {}", vault_dir);
return;
}
for entry in std::fs::read_dir(dir).unwrap() {
if let Ok(entry) = entry {
let path = entry.path();
if path.extension().map(|ext| ext == "vault").unwrap_or(false) {
if let Ok(contents) = std::fs::read_to_string(&path) {
if let Ok(memtrace) = serde_json::from_str::<MemoryTrace>(&contents) {
all_memories.push(memtrace);
}
}
}
}
}
println!("\n📊 Emotional Drift Report:");
for pair in all_memories.windows(2) {
let a = &pair[0];
let b = &pair[1];
let tone_drift = drift_score(a.tone(), b.tone());
let intent_drift = drift_score(a.intent(), b.intent());
let reem_drift = drift_score(a.reem_code(), b.reem_code());
println!(
"🔁 {} → {}\n Tone Drift: {}\n Intent Drift: {}\n REEM Drift: {}\n",
a.id(),
b.id(),
tone_drift,
intent_drift,
reem_drift
);
}
}