use std::sync::{Mutex, PoisonError};
use std::time::{Duration, Instant};
use systemprompt_loader::ConfigLoadResult;
use systemprompt_manifest::services::ServicesConfig;
use super::bridge_data;
const TTL: Duration = Duration::from_secs(10);
static CACHED: Mutex<Option<(Instant, ServicesConfig)>> = Mutex::new(None);
pub fn load_services_config() -> ConfigLoadResult<ServicesConfig> {
if let Some((loaded_at, config)) = CACHED
.lock()
.unwrap_or_else(PoisonError::into_inner)
.as_ref()
&& loaded_at.elapsed() < TTL
{
return Ok(config.clone());
}
let config = bridge_data::load_services_config()?;
*CACHED.lock().unwrap_or_else(PoisonError::into_inner) = Some((Instant::now(), config.clone()));
Ok(config)
}