use crate::{daemon_base_url, register_index_with_daemon, run_reindex, run_reindex_force};
use anyhow::Result;
use colored::Colorize;
pub async fn handle_index(
path: Option<std::path::PathBuf>,
name: Option<String>,
force: bool,
) -> Result<()> {
let cwd = std::env::current_dir().unwrap_or_default();
let project_path = path.unwrap_or(cwd);
let index_name = name.unwrap_or_else(|| {
project_path
.file_name()
.unwrap_or_default()
.to_string_lossy()
.into_owned()
});
crate::commands::daemon_guard::ensure_daemon_running_or_exit(&daemon_base_url()).await;
let (created, daemon_reachable) =
match register_index_with_daemon(&index_name, &project_path).await {
Ok(tuple) => tuple,
Err(e) => {
eprintln!("{} {}", "✗".red(), e);
std::process::exit(1);
}
};
if !daemon_reachable {
eprintln!(
"{} Daemon not reachable at {}. Start it with {}.",
"✗".red(),
daemon_base_url().cyan(),
"trusty-search start".cyan(),
);
std::process::exit(1);
}
if created {
println!(
"{} '{}' registered at {}",
"✓".green(),
index_name.bold(),
project_path.display()
);
}
if force {
run_reindex_force(&index_name, &project_path).await?;
} else {
run_reindex(&index_name, &project_path).await?;
}
Ok(())
}