use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::net::SocketAddr;
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskConfig {
pub name: String,
pub id: Uuid,
pub command: String,
pub is_periodic: bool,
pub interval: String,
pub importance: u8,
pub dependencies: Vec<Uuid>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MissionConfig {
pub name: String,
pub tasks: Vec<TaskConfig>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum TaskStatus {
Pending,
Running,
Completed,
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskInfo {
pub id: Uuid,
pub status: TaskStatus,
pub start_time: Option<DateTime<Utc>>,
pub end_time: Option<DateTime<Utc>>,
pub execution_order: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskCommunication {
pub sender_id: Uuid,
pub receiver_id: Uuid,
pub message_type: String,
pub payload: String,
}
pub type TaskDependencyMap = HashMap<Uuid, bool>;
pub type TaskAddressMap = HashMap<Uuid, SocketAddr>;