use crate::backend::pagination::Pagination;
use crate::base::keys::TaskState;
use crate::error::Result;
use crate::proto::ServerInfo;
use crate::task::{DailyStats, QueueInfo, QueueStats, TaskInfo};
use async_trait::async_trait;
#[async_trait]
pub trait InspectorTrait: Send + Sync {
async fn get_queue_stats(&self, queue: &str) -> Result<QueueStats>;
async fn get_queue_info(&self, queue: &str) -> Result<QueueInfo>;
async fn get_all_queue_stats(&self) -> Result<Vec<QueueStats>>;
async fn get_queues(&self) -> Result<Vec<String>>;
async fn get_groups(&self, queue: &str) -> Result<Vec<String>>;
async fn list_tasks(
&self,
queue: &str,
state: TaskState,
pagination: Pagination,
) -> Result<Vec<TaskInfo>>;
async fn get_task_info(&self, queue: &str, task_id: &str) -> Result<TaskInfo>;
async fn delete_task(&self, queue: &str, task_id: &str) -> Result<()>;
async fn delete_all_archived_tasks(&self, queue: &str) -> Result<i64>;
async fn delete_all_retry_tasks(&self, queue: &str) -> Result<i64>;
async fn delete_all_scheduled_tasks(&self, queue: &str) -> Result<i64>;
async fn delete_all_pending_tasks(&self, queue: &str) -> Result<i64>;
async fn requeue_all_archived_tasks(&self, queue: &str) -> Result<i64>;
async fn requeue_all_retry_tasks(&self, queue: &str) -> Result<i64>;
async fn requeue_all_scheduled_tasks(&self, queue: &str) -> Result<i64>;
async fn run_task(&self, queue: &str, task_id: &str) -> Result<()>;
async fn archive_task(&self, queue: &str, task_id: &str) -> Result<()>;
async fn archive_all_pending_tasks(&self, queue: &str) -> Result<i64>;
async fn archive_all_retry_tasks(&self, queue: &str) -> Result<i64>;
async fn archive_all_scheduled_tasks(&self, queue: &str) -> Result<i64>;
async fn archive_all_aggregating_tasks(&self, queue: &str) -> Result<i64>;
async fn pause_queue(&self, queue: &str) -> Result<()>;
async fn unpause_queue(&self, queue: &str) -> Result<()>;
async fn is_queue_paused(&self, queue: &str) -> Result<bool>;
async fn get_task_result(&self, queue: &str, task_id: &str) -> Result<Option<Vec<u8>>>;
async fn delete_expired_completed_tasks(&self, queue: &str) -> Result<i64>;
async fn get_servers(&self) -> Result<Vec<ServerInfo>>;
async fn get_server_info(&self, server_id: &str) -> Result<Option<ServerInfo>>;
async fn get_history(&self, queue: &str, days: i32) -> Result<Vec<DailyStats>>;
async fn cancel_processing(&self, task_id: &str) -> Result<()>;
}
pub use crate::backend::RedisInspector;
#[cfg(feature = "postgres")]
pub use crate::backend::PostgresInspector;
#[cfg(feature = "websocket")]
pub use crate::backend::WebSocketInspector;
pub use crate::backend::Inspector;