use saya_types::{SessionTaskList, TaskStatus};
#[cfg(any(test, doctest))]
pub(crate) const TASKS_VIEW_CEILING: usize = 32_768;
pub(crate) fn render_tasks_view(list: &SessionTaskList) -> String {
if list.is_empty() {
return "No tasks are being tracked.".to_string();
}
let done = list
.tasks
.iter()
.filter(|task| task.status == TaskStatus::Done)
.count();
let mut out = format!("Tasks ({done}/{} done):", list.tasks.len());
for task in &list.tasks {
out.push_str("\n ");
out.push_str(match task.status {
TaskStatus::Done => "[x]",
TaskStatus::InProgress => "[>]",
_ => "[ ]",
});
out.push(' ');
out.push_str(&task.title);
if let Some(note) = task.note.as_deref() {
out.push_str(" \u{2014} ");
out.push_str(note);
}
}
out
}
pub(crate) fn tasks_summary(list: &SessionTaskList) -> Option<String> {
if list.is_empty() {
return None;
}
let done = list
.tasks
.iter()
.filter(|task| task.status == TaskStatus::Done)
.count();
Some(format!("tasks: {done}/{}", list.tasks.len()))
}