use crate::detect::{detect_project, DetectionMethod};
use colored::Colorize;
pub fn resolve_index(explicit: &Option<String>) -> (String, bool) {
if let Some(id) = explicit {
return (id.clone(), false);
}
let cwd = std::env::current_dir().unwrap_or_default();
let ctx = detect_project(&cwd);
let warned = matches!(ctx.detection_method, DetectionMethod::Fallback);
(ctx.index_id, warned)
}
pub fn print_index_header(index_id: &str, warned: bool) {
if warned {
eprintln!(
"{} No .git or .trusty-search found — using directory name '{}'. \
Run `trusty-search init` to register this project.",
"⚠".yellow(),
index_id
);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn resolve_index_explicit_wins() {
let explicit = Some("my-explicit-index".to_string());
let (id, warned) = resolve_index(&explicit);
assert_eq!(id, "my-explicit-index");
assert!(!warned, "explicit --index should never warn");
}
#[test]
fn resolve_index_explicit_empty_string_still_wins() {
let explicit = Some(String::new());
let (id, warned) = resolve_index(&explicit);
assert_eq!(id, "");
assert!(!warned);
}
#[test]
fn resolve_index_none_falls_through_to_detection() {
let (id, _warned) = resolve_index(&None);
assert!(
!id.is_empty(),
"auto-detected index_id should never be empty"
);
}
#[test]
fn print_index_header_warned_false_is_silent() {
print_index_header("any-id", false);
}
#[test]
fn print_index_header_warned_true_does_not_panic() {
print_index_header("fallback-id", true);
}
}