use std::path::{Path, PathBuf};
use scryer_db::{Project, ProjectRegistry, is_registrable_root};
use scryer_engine::EngineService;
pub async fn ensure_cwd_registered(
registry: &ProjectRegistry,
engine: &EngineService,
cwd: &Path,
) -> anyhow::Result<Option<Project>> {
if registry.resolve_path(cwd).await.is_some() {
return Ok(None);
}
if !is_registrable_root(cwd) {
tracing::info!(
"Not registering {}: not inside a registered project and not a project root",
cwd.display()
);
return Ok(None);
}
let project = registry.register_or_update(cwd, None).await?;
engine.mark_building(project.id);
let engine = engine.clone();
let indexed = project.clone();
tokio::spawn(async move {
let root = PathBuf::from(&indexed.root_path);
if let Err(e) = engine.index_project(indexed.id, &root).await {
tracing::warn!("Initial index of {} failed: {e}", root.display());
}
});
Ok(Some(project))
}