use std::time::SystemTime;
use crate::priority::Priority;
use crate::repeat::RepeatRule;
#[derive(Clone, Eq, PartialEq)]
pub struct Todo {
pub id: crate::id::TodoId,
pub title: String,
pub completed: bool,
pub created_at: SystemTime,
pub completed_at: Option<SystemTime>,
pub description: Option<String>,
pub due_date: Option<String>,
pub priority: Option<Priority>,
pub tags: Vec<String>,
pub repeat_rule: Option<RepeatRule>,
pub repeat_until: Option<String>,
pub repeat_count: Option<u32>,
}
#[derive(Clone, Default)]
pub struct TodoPatch {
pub title: Option<String>,
pub description: Option<String>,
pub due_date: Option<String>,
pub priority: Option<Priority>,
pub tags: Option<Vec<String>>,
pub repeat_rule: Option<RepeatRule>,
pub repeat_until: Option<String>,
pub repeat_count: Option<u32>,
pub repeat_rule_clear: bool,
}
#[derive(Clone, Default)]
pub struct ListFilter {
pub status: Option<bool>,
pub priority: Option<Priority>,
pub tags_any: Option<Vec<String>>,
pub due_before: Option<String>,
pub due_after: Option<String>,
}
#[derive(Clone, Copy, Default)]
pub enum ListSort {
#[default]
CreatedAt,
DueDate,
Priority,
Title,
}
#[derive(Clone, Default)]
pub struct ListOptions {
pub filter: Option<ListFilter>,
pub sort: ListSort,
}