use std::sync::Arc;
use anyhow::{Result, anyhow};
use rsclaw_channel::{ChannelManager, OutboundMessage};
pub async fn deliver(
channels: &Arc<ChannelManager>,
channel: &str,
account: Option<&str>,
peer: &str,
body: String,
) -> Result<()> {
let resolved = if channel == "ws" { "desktop" } else { channel };
let ch = match account {
Some(acct) => {
let keyed = format!("{resolved}/{acct}");
channels.get(&keyed).or_else(|| channels.get(resolved))
}
None => channels.get(resolved),
};
let ch = ch.ok_or_else(|| anyhow!("watch: channel `{channel}` not registered"))?;
let msg = OutboundMessage {
target_id: peer.to_owned(),
text: body,
account: account.map(str::to_owned),
..Default::default()
};
ch.send(msg).await
}