use std::collections::HashMap;
use nostr::nips::nip46::NostrConnectURI;
use nostr::{Keys, NostrSigner};
use nostr_sdk::prelude::*;
use once_cell::sync::Lazy;
use std::ops::DerefMut;
use std::sync::Arc;
use tokio::sync::mpsc::{Receiver, Sender};
use crate::storage::Storage;
pub struct CaracalUser {
pub client: Arc<Client>,
pub upload_keys: Keys,
pub signer: Arc<dyn NostrSigner>,
pub connect_uri: Option<NostrConnectURI>,
pub storage: Storage,
pub tx: Sender<u8>,
pub rx: Receiver<u8>,
}
pub static mut USERS: Lazy<HashMap<String, CaracalUser>> = Lazy::new(|| {
HashMap::new()
});
pub fn lookup_user(fingerprint: String) -> Option<&'static CaracalUser> {
#[allow(static_mut_refs)]
unsafe {
let us = USERS.deref_mut();
us.get(&fingerprint.clone())
}
}
pub fn lookup_user_mut(
fingerprint: String,
) -> Option<&'static mut CaracalUser> {
#[allow(static_mut_refs)]
unsafe {
let us = USERS.deref_mut();
us.get_mut(&fingerprint.clone())
}
}