use super::super::args::{EnrichArgs, EnrichMode, EnrichOperation, ReEmbedTarget};
use super::super::scheduler;
use crate::errors::AppError;
pub(super) fn handle_pre_db_guards(
args: &EnrichArgs,
llm_backend: crate::cli::LlmBackendChoice,
embedding_backend: crate::cli::EmbeddingBackendChoice,
) -> Result<bool, AppError> {
if args.print_schema {
crate::print_schema::emit(crate::print_schema::SchemaId::EnrichStatus)?;
return Ok(true);
}
if args.ops_gate {
for op in scheduler::gate_ops_order() {
let mut gate_args = args.clone();
gate_args.operation = Some(op);
gate_args.ops_gate = false; super::run(&gate_args, llm_backend, embedding_backend)?;
}
return Ok(true);
}
if args.target != ReEmbedTarget::Memories
&& !matches!(args.operation(), EnrichOperation::ReEmbed)
{
let target_label = match args.target {
ReEmbedTarget::Memories => "memories",
ReEmbedTarget::Entities => "entities",
ReEmbedTarget::Chunks => "chunks",
ReEmbedTarget::All => "all",
};
return Err(AppError::Validation(
crate::i18n::validation::reembed_target_only(target_label),
));
}
if super::super::status::try_handle_maintenance(args)? {
return Ok(true);
}
if args.mode() == EnrichMode::OpenRouter && !args.dry_run {
let model = args.openrouter_model.as_deref().ok_or_else(|| {
AppError::Validation(crate::i18n::validation::openrouter_model_required())
})?;
let resolved =
crate::config::resolve_api_key("openrouter", args.openrouter_api_key.as_deref())
.ok_or_else(|| {
AppError::Validation(crate::i18n::validation::openrouter_api_key_not_found())
})?;
crate::embedder::get_openrouter_chat_client(
resolved.value,
model,
args.openrouter_chat_timeout_secs(),
)?;
}
Ok(false)
}