use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::{Mutex, oneshot};
use tokio_util::sync::CancellationToken;
use uuid::Uuid;
use super::{interactions, tool_group};
pub struct DiscordState {
pub(super) http: Mutex<Option<Arc<serenity::http::Http>>>,
pub(super) owner_channel_id: Mutex<Option<u64>>,
pub(super) bot_user_id: Mutex<Option<u64>>,
pub(super) guild_id: Mutex<Option<u64>>,
pub(super) session_channels: Mutex<HashMap<Uuid, u64>>,
pub(super) channel_sessions: Mutex<HashMap<u64, Uuid>>,
pub(super) pending_approvals: Mutex<HashMap<String, oneshot::Sender<(bool, bool)>>>,
pub(super) cancel_tokens: Mutex<HashMap<Uuid, CancellationToken>>,
pub(super) pending_selects: Mutex<HashMap<String, (std::time::Instant, Vec<String>)>>,
pub(super) pending_forms: Mutex<HashMap<String, (std::time::Instant, interactions::FormSpec)>>,
pub(super) tool_groups: Mutex<(Vec<u64>, HashMap<u64, tool_group::GroupState>)>,
}
impl Default for DiscordState {
fn default() -> Self {
Self::new()
}
}
impl DiscordState {
pub fn new() -> Self {
Self {
http: Mutex::new(None),
owner_channel_id: Mutex::new(None),
bot_user_id: Mutex::new(None),
guild_id: Mutex::new(None),
session_channels: Mutex::new(HashMap::new()),
channel_sessions: Mutex::new(HashMap::new()),
pending_approvals: Mutex::new(HashMap::new()),
cancel_tokens: Mutex::new(HashMap::new()),
pending_selects: Mutex::new(HashMap::new()),
pending_forms: Mutex::new(HashMap::new()),
tool_groups: Mutex::new((Vec::new(), HashMap::new())),
}
}
}