use crate::filters;
use anyhow::Result;
use lowfat_core::config::RunfConfig;
use lowfat_plugin::discovery::discover_plugins;
pub fn run() -> Result<()> {
let config = RunfConfig::resolve();
let all_filters = filters::builtins();
let external = discover_plugins(&config.plugin_dir);
let filter_count = all_filters
.keys()
.filter(|cmd| config.is_enabled(cmd))
.count()
+ external
.iter()
.filter(|p| {
p.manifest
.plugin
.commands
.iter()
.all(|c| config.is_enabled(c))
})
.count();
let saved_str = if let Ok(db) = lowfat_core::db::Db::open(&config.data_dir) {
if let Ok(session) = db.session_summary(&today_utc()) {
if session.saved_tokens > 1000 {
format!("{:.1}K saved", session.saved_tokens as f64 / 1000.0)
} else {
format!("{} saved", session.saved_tokens)
}
} else {
"0 saved".to_string()
}
} else {
"0 saved".to_string()
};
println!("lowfat:{}|{}f|{}", config.level, filter_count, saved_str);
Ok(())
}
fn today_utc() -> String {
let secs = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_secs();
let days = secs / 86400;
let z = days as i64 + 719468;
let era = z / 146097;
let doe = z - era * 146097;
let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
let y = yoe + era * 400;
let doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
let mp = (5 * doy + 2) / 153;
let d = doy - (153 * mp + 2) / 5 + 1;
let m = if mp < 10 { mp + 3 } else { mp - 9 };
let y = if m <= 2 { y + 1 } else { y };
format!("{y:04}-{m:02}-{d:02}")
}