1use crate::storage::save_tasks;
2use crate::task::Task;
3use chrono::DateTime;
4use chrono::offset::Utc;
5use colored::*;
6
7pub fn add_task(tasks: &mut Vec<Task>, text: String, date_string: String) {
8 let new_task = Task::new(text.clone(), date_string.clone());
9 println!("Adding task: {}", new_task.date_string);
10 tasks.push(new_task.clone());
11 save_tasks(tasks);
12 println!("Added: {} --due {}", text.green(), date_string.blue());
13}
14
15pub fn list_tasks(tasks: &[Task]) {
16 if tasks.is_empty() {
17 println!("No tasks yet!");
18 } else {
19 let now: DateTime<Utc> = Utc::now();
20 let current_date = now.format("%Y-%m-%d").to_string();
21
22 for (i, task) in tasks.iter().enumerate() {
23 let status = if task.done { "[X]" } else { "[ ]" };
24 let (task_text, date_text) = if current_date > task.date_string {
25 (task.text.blue(), task.date_string.red())
27 } else {
28 (task.text.blue(), task.date_string.yellow())
30 };
31 println!("{}: {} {} due {}", i, status, task_text, date_text);
32 }
33 }
34}
35
36pub fn remove_task(tasks: &mut Vec<Task>, index: usize) {
37 if index < tasks.len() {
38 let task = tasks.remove(index);
39 save_tasks(tasks);
40 println!("Removed: {}", task.text.red());
41 } else {
42 println!("Error: Invalid index {}", index);
43 }
44}
45
46pub fn done_task(tasks: &mut Vec<Task>, index: usize) {
47 if index < tasks.len() {
48 tasks[index].mark_done();
49 save_tasks(tasks);
50 println!("Marked as done: {}", tasks[index].text.green());
51 } else {
52 println!("Error: Invalid index {}", index);
53 }
54}
55pub fn edit_task(tasks: &mut Vec<Task>, index: usize, new_text: String) {
56 if index < tasks.len() {
57 let old_text = tasks[index].text.clone();
58 tasks[index].text = new_text.clone();
59 save_tasks(tasks);
60 println!(
61 "Edited task {}: '{}' -> '{}'",
62 index,
63 old_text.yellow(),
64 new_text.green()
65 );
66 } else {
67 println!("Error: Invalid index {index}");
68 }
69}