use std::collections::HashMap;
use std::path::PathBuf;
use std::time::{Duration, SystemTime};
use crate::error::Error;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct Entry {
pub path: PathBuf,
pub relative_path: PathBuf,
pub size: u64,
pub modified: Option<SystemTime>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct ExtensionStats {
pub count: usize,
pub total_size: u64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct MimeStats {
pub count: usize,
pub total_size: u64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct AgeBuckets {
pub under_1_day: usize,
pub under_1_week: usize,
pub under_1_month: usize,
pub under_1_year: usize,
pub older: usize,
pub unknown: usize,
}
#[cfg(feature = "checksum")]
#[derive(Debug, Clone)]
pub struct DuplicateGroup {
pub hash: [u8; 32],
pub size: u64,
pub paths: Vec<PathBuf>,
}
pub const DEFAULT_MAX_REPORTED_ERRORS: usize = 1000;
#[cfg(feature = "checksum")]
pub const DEFAULT_MAX_REPORTED_DUPLICATE_GROUPS: usize = 1000;
#[derive(Debug)]
#[non_exhaustive]
pub struct AnalysisReport {
pub file_count: usize,
pub dir_count: usize,
pub total_size: u64,
pub largest_files: Vec<Entry>,
pub by_extension: HashMap<String, ExtensionStats>,
pub by_mime: HashMap<String, MimeStats>,
pub age_buckets: AgeBuckets,
pub errors: Vec<(PathBuf, Error)>,
pub errors_total: usize,
#[cfg(feature = "checksum")]
pub duplicates: Vec<DuplicateGroup>,
#[cfg(feature = "checksum")]
pub duplicate_groups_total: usize,
#[cfg(feature = "checksum")]
pub duplicate_bytes_wasted: u64,
pub duration: Duration,
}