use crate::error::Result;
use crate::task::{Task, TaskStatus};
use async_trait::async_trait;
#[async_trait]
pub trait TaskStorage: Send + Sync {
async fn save_task(&self, task: &Task) -> Result<()>;
async fn get_task(&self, task_id: &str) -> Result<Option<Task>>;
async fn update_task_status(&self, task_id: &str, status: TaskStatus) -> Result<()>;
async fn list_tasks_by_status(&self, status: TaskStatus) -> Result<Vec<Task>>;
async fn list_tasks_by_worker(&self, worker_id: &str) -> Result<Vec<Task>>;
async fn delete_task(&self, task_id: &str) -> Result<()>;
async fn get_pending_tasks(&self, limit: usize) -> Result<Vec<Task>>;
async fn get_tasks_by_tags(&self, tags: &[String]) -> Result<Vec<Task>>;
}