use anyhow::{anyhow, Result};
use std::{thread, time::Duration};
use zeroize::Zeroizing;
pub fn copy_to_clipboard(text: &str, timeout: Option<Duration>) -> Result<()> {
let mut clipboard =
arboard::Clipboard::new().map_err(|e| anyhow!("Failed to access clipboard: {e}"))?;
let previous = clipboard.get_text().ok().map(Zeroizing::new);
clipboard
.set_text(text.to_owned())
.map_err(|e| anyhow!("Failed to copy to clipboard: {e}"))?;
if let Some(duration) = timeout {
thread::spawn(move || {
thread::sleep(duration);
if let Ok(mut cb) = arboard::Clipboard::new() {
if let Some(prev) = previous {
let _ = cb.set_text(prev.to_string());
} else {
let _ = cb.clear();
}
}
});
}
Ok(())
}