use clap::Parser;
use regex::Regex;
use std::fs::File;
use std::io::{BufRead, BufReader};
use timber_rs::analyzer::LogAnalyzer;
use timber_rs::cli::Args;
use timber_rs::formatter::print_results;
fn main() -> std::io::Result<()> {
let args = Args::parse();
println!("\nWaking LumberJacks...Timber is chopping: {}\n", args.file);
let pattern = match &args.chop {
Some(pattern) => {
println!("Searching for pattern: {}", pattern);
Some(Regex::new(pattern).expect("Invalid regex pattern"))
}
None => None,
};
let level = args.level.as_deref();
if let Some(level_str) = level {
println!("Filtering by level: {}", level_str);
}
let file = File::open(&args.file)?;
let reader = BufReader::new(file);
let lines = reader.lines().map(|l| l.expect("Could not read line"));
let analyzer = LogAnalyzer::new();
let result = analyzer.analyze_lines(lines, pattern.as_ref(), level, args.trend, args.stats);
println!();
print_results(&result, args.trend, args.stats);
Ok(())
}