use super::daemon_utils::{daemon_base_url, http_addr_path};
use anyhow::Result;
use colored::Colorize;
pub async fn handle_dashboard() -> Result<()> {
crate::commands::daemon_guard::ensure_daemon_running_or_exit(&daemon_base_url()).await?;
open_dashboard_in_browser()
}
fn open_dashboard_in_browser() -> Result<()> {
let Some(path) = http_addr_path() else {
anyhow::bail!("could not resolve $HOME — set HOME and try again");
};
let addr = match std::fs::read_to_string(&path) {
Ok(s) => s.trim().to_string(),
Err(_) => {
anyhow::bail!(
"No daemon running ({} not found). Start one with `trusty-search start`.",
path.display(),
);
}
};
if addr.is_empty() {
anyhow::bail!("{} is empty — daemon may be shutting down", path.display());
}
let url = format!("http://{addr}/ui");
println!("{} Opening {} …", "◉".green(), url.cyan());
if let Err(e) = open::that(&url) {
eprintln!(
"{} could not launch browser ({e}). Open this URL manually: {}",
"⚠".yellow(),
url
);
}
Ok(())
}