use anyhow::Result;
use chrono::{DateTime, Local};
use std::fs;
use std::path::Path;
use tracing::info;
use tracing_subscriber::{
EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt,
};
pub fn init_logging(config: &cortex_mem_config::LoggingConfig) -> Result<()> {
if !config.enabled {
tracing_subscriber::registry().try_init().ok(); return Ok(());
}
fs::create_dir_all(&config.log_directory)?;
let local_time: DateTime<Local> = Local::now();
let log_file_name = format!("cortex-memo-{}.log", local_time.format("%Y-%m-%d-%H-%M-%S"));
let log_file_path = Path::new(&config.log_directory).join(log_file_name);
let file_writer = std::fs::File::create(&log_file_path)?;
let level_filter = match config.level.to_lowercase().as_str() {
"error" => "error",
"warn" => "warn",
"info" => "info",
"debug" => "debug",
"trace" => "trace",
_ => "info", };
let file_filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(level_filter));
let file_layer = fmt::layer()
.with_target(false)
.with_ansi(false)
.with_writer(std::sync::Mutex::new(file_writer))
.with_filter(file_filter);
tracing_subscriber::registry().with(file_layer).try_init()?;
info!("Logging initialized. Log file: {}", log_file_path.display());
Ok(())
}