use pace_time::{time_frame::PaceTimeFrame, time_range::TimeRangeOptions};
use tracing::debug;
use crate::{
domain::{filter::FilterOptions, reflection::ReflectionSummary},
error::PaceOptResult,
service::activity_store::ActivityStore,
};
pub struct ActivityTracker {
pub store: ActivityStore,
}
impl ActivityTracker {
pub fn with_activity_store(store: ActivityStore) -> Self {
debug!("Creating activity tracker with activity store");
Self { store }
}
#[tracing::instrument(skip(self))]
pub fn generate_reflection(
&self,
filter_opts: FilterOptions,
time_frame: PaceTimeFrame,
) -> PaceOptResult<ReflectionSummary> {
let time_range_opts = TimeRangeOptions::try_from(time_frame)?;
let Some(summary_groups) = self
.store
.summary_groups_by_category_for_time_range(filter_opts, time_range_opts)?
else {
return Ok(None);
};
let summary = ReflectionSummary::new(time_range_opts, summary_groups);
debug!("Generated reflection: {:#?}", summary);
Ok(Some(summary))
}
}