use crate::rtw_core::activity::{Activity, OngoingActivity};
use crate::rtw_core::datetimew::DateTimeW;
use crate::rtw_core::ActivityId;
pub trait ActivityService {
fn get_current_activity(&self) -> anyhow::Result<Option<OngoingActivity>>;
fn start_activity(&mut self, activity: OngoingActivity) -> anyhow::Result<OngoingActivity>;
fn stop_current_activity(&mut self, time: DateTimeW) -> anyhow::Result<Option<Activity>>;
fn cancel_current_activity(&mut self) -> 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) -> anyhow::Result<Activity>;
}