use std::sync::{Arc, OnceLock};
use std::time::Duration;
pub const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(10);
pub const DEFAULT_READ_TIMEOUT: Duration = Duration::from_secs(120);
static AGENT: OnceLock<Result<ureq::Agent, String>> = OnceLock::new();
pub fn build_agent(connect_timeout: Duration, read_timeout: Duration) -> Result<ureq::Agent, String> {
let connector = native_tls::TlsConnector::new()
.map_err(|e| format!("native-tls connector init failed: {}", e))?;
Ok(ureq::AgentBuilder::new()
.tls_connector(Arc::new(connector))
.timeout_connect(connect_timeout)
.timeout_read(read_timeout)
.build())
}
pub fn agent() -> Result<&'static ureq::Agent, String> {
let cached = AGENT.get_or_init(|| build_agent(DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT));
match cached {
Ok(a) => Ok(a),
Err(e) => Err(e.clone()),
}
}