use crate::list;
use std::io::{self, Write};
use std::fs::{File};
pub fn complete(task_str: String) -> io::Result<()> {
let target_task = match task_str.parse::<usize>() {
Ok(num) if num > 0 => num,
_ => {
eprintln!("Please provide valid task number");
return Ok(());
}
};
let file_content = match list::list_tasks() {
Ok(content) => content,
Err(e) => {
eprintln!("Error reading from File");
return Err(e);
}
};
let mut lines: Vec<String> = file_content.lines().map(|line| line.to_string()).collect();
let mut task_found_count ;
for (i, line) in lines.iter_mut().enumerate() {
if !line.is_empty() {
task_found_count = i + 1;
if task_found_count == target_task {
if line.contains("[ ]") {
*line = line.replace("[ ]", "[X]");
println!("Task {} marked as complete", task_found_count);
break;
} else {
*line = line.replace("[X]", "[ ]");
println!("Task {} marked as incomplete", task_found_count);
break;
}
}
}
}
let content = lines.join("\n");
let new_content_n = format!("{}\n",content);
let mut file = File::create("Tasks.txt")?;
file.write_all(new_content_n.as_bytes())?;
Ok(())
}