use std::path::Path;
use anyhow::Result;
use modde_core::collision::{CollisionClassifier, CollisionSeverity};
use super::archive_index::ArchiveIndex;
pub struct BethesdaCollisionClassifier;
impl CollisionClassifier for BethesdaCollisionClassifier {
fn index_archive(&self, archive_path: &Path) -> Result<Vec<(String, u64)>> {
let index = ArchiveIndex::read(archive_path)?;
Ok(index.files.into_iter().map(|f| (f.path, f.size)).collect())
}
fn classify_severity(&self, file_path: &str) -> CollisionSeverity {
let ext = file_path
.rsplit('.')
.next()
.unwrap_or("")
.to_lowercase();
match ext.as_str() {
"esp" | "esm" | "esl" | "pex" | "dll" | "psc" => CollisionSeverity::Dangerous,
"ini" | "cfg" | "json" | "toml" | "xml" => CollisionSeverity::Config,
"dds" | "png" | "tga" | "jpg" | "nif" | "hkx" | "fuz" | "wav" | "xwm" | "swf"
| "btr" | "bto" | "btt" => CollisionSeverity::Cosmetic,
"bsa" | "ba2" => CollisionSeverity::Cosmetic,
_ => CollisionSeverity::Unknown,
}
}
fn archive_extensions(&self) -> &[&str] {
&["bsa", "ba2"]
}
}