use crate::rtw_core::activity::{Activity, OngoingActivity};
use crate::rtw_core::datetimew::DateTimeW;
use crate::rtw_core::ActivityId;
pub trait ActivityService {
fn get_ongoing_activities(&self) -> anyhow::Result<Vec<(ActivityId, OngoingActivity)>>;
fn get_ongoing_activity(&self, id: ActivityId) -> anyhow::Result<Option<OngoingActivity>>;
fn start_activity(
&mut self,
activity: OngoingActivity,
deny_overlapping: bool,
) -> anyhow::Result<(OngoingActivity, Option<Activity>)>;
fn stop_ongoing_activity(
&mut self,
time: DateTimeW,
id: ActivityId,
deny_overlapping: bool,
) -> anyhow::Result<Option<Activity>>;
fn cancel_ongoing_activity(
&mut self,
id: ActivityId,
) -> anyhow::Result<Option<OngoingActivity>>;
fn filter_activities<P>(&self, p: P) -> anyhow::Result<Vec<(ActivityId, Activity)>>
where
P: Fn(&(ActivityId, Activity)) -> bool;
fn get_finished_activities(&self) -> anyhow::Result<Vec<(ActivityId, Activity)>>;
fn delete_activity(&self, id: ActivityId) -> anyhow::Result<Option<Activity>>;
fn track_activity(
&mut self,
activity: Activity,
deny_overlapping: bool,
) -> anyhow::Result<Activity>;
}