use anyhow::Result;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionPlan {
pub title: String,
pub tasks: Vec<PlanTask>,
pub current_task_index: usize,
pub created_at: DateTime<Utc>,
pub status: PlanStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlanTask {
pub title: String,
pub description: String, pub details: String, pub summary: Option<String>, pub status: TaskStatus,
pub completed_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PlanStatus {
Active,
Completed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TaskStatus {
InProgress,
Completed,
}
#[derive(Debug, Clone)]
pub struct TaskData {
pub title: String,
pub description: String,
}
impl TaskData {
pub fn new(title: String, description: String) -> Self {
Self { title, description }
}
}
pub trait PlanStorage {
fn create_plan(&mut self, title: String, tasks: Vec<TaskData>) -> Result<()>;
fn add_step_details(&mut self, content: String) -> Result<()>;
fn get_current_step_details(&self) -> Result<String>;
fn complete_current_task(&mut self, summary: String) -> Result<()>;
fn has_more_tasks(&self) -> Result<bool>;
fn get_task_list(&self) -> Result<Vec<(String, String, TaskStatus)>>;
fn get_current_task_info(&self) -> Result<(usize, usize, String, String)>;
fn complete_plan(&mut self, summary: String) -> Result<()>;
fn clear_plan(&mut self) -> Result<()>;
fn has_active_plan(&self) -> Result<bool>;
fn get_plan_title(&self) -> Result<String>;
}