use arch_toolkit::error::Result;
use arch_toolkit::{ArchClient, ArchClientBuilder};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<()> {
println!("╔═══════════════════════════════════════════════════════════════╗");
println!("║ arch-toolkit: Environment Variable Configuration ║");
println!("╚═══════════════════════════════════════════════════════════════╝\n");
println!("┌─ Example 1: Pure Environment Configuration ──────────────────┐");
println!("│ Creating client entirely from environment variables │");
println!("│ Use: ARCH_TOOLKIT_TIMEOUT=60 cargo run --example env_config │");
println!("└──────────────────────────────────────────────────────────────┘");
let client = ArchClientBuilder::from_env().build()?;
println!("✓ Client created from environment variables\n");
let _packages = client.aur().search("yay").await?;
println!("✓ Successfully performed AUR search\n");
println!("┌─ Example 2: Code Defaults with Environment Overrides ────────┐");
println!("│ Set code defaults, but allow environment to override │");
println!("│ Use: ARCH_TOOLKIT_TIMEOUT=120 cargo run --example env_config │");
println!("└──────────────────────────────────────────────────────────────┘");
let _client = ArchClient::builder()
.timeout(Duration::from_secs(60))
.with_env() .build()?;
println!("✓ Client created with code defaults + environment overrides\n");
println!("┌─ Example 3: Environment First, Then Code Overrides ─────────┐");
println!("│ Load from environment, then override specific values │");
println!("│ Use: ARCH_TOOLKIT_USER_AGENT=\"env-agent/1.0\" cargo run... │");
println!("└──────────────────────────────────────────────────────────────┘");
let _client = ArchClientBuilder::from_env()
.user_agent("my-app/1.0") .build()?;
println!("✓ Client created from environment, then overridden in code\n");
println!("┌─ Example 4: Environment Variable Examples ───────────────────┐");
println!("│ │");
println!("│ Set these environment variables to configure the client: │");
println!("│ │");
println!("│ # Timeout configuration │");
println!("│ export ARCH_TOOLKIT_TIMEOUT=60 │");
println!("│ export ARCH_TOOLKIT_HEALTH_CHECK_TIMEOUT=10 │");
println!("│ │");
println!("│ # User agent │");
println!("│ export ARCH_TOOLKIT_USER_AGENT=\"my-app/1.0\" │");
println!("│ │");
println!("│ # Retry policy │");
println!("│ export ARCH_TOOLKIT_MAX_RETRIES=5 │");
println!("│ export ARCH_TOOLKIT_RETRY_ENABLED=true │");
println!("│ export ARCH_TOOLKIT_RETRY_INITIAL_DELAY_MS=2000 │");
println!("│ export ARCH_TOOLKIT_RETRY_MAX_DELAY_MS=60000 │");
println!("│ │");
println!("│ # Validation │");
println!("│ export ARCH_TOOLKIT_VALIDATION_STRICT=false │");
println!("│ │");
println!("│ # Cache │");
println!("│ export ARCH_TOOLKIT_CACHE_SIZE=200 │");
println!("│ │");
println!("│ Then run: cargo run --example env_config │");
println!("└──────────────────────────────────────────────────────────────┘\n");
println!("┌─ Example 5: CI/CD Usage Pattern ───────────────────────────────┐");
println!("│ Typical CI/CD configuration: │");
println!("│ │");
println!("│ # In CI/CD pipeline (e.g., GitHub Actions, GitLab CI) │");
println!("│ env: │");
println!("│ ARCH_TOOLKIT_TIMEOUT: 120 │");
println!("│ ARCH_TOOLKIT_MAX_RETRIES: 5 │");
println!("│ ARCH_TOOLKIT_USER_AGENT: \"ci-runner/1.0\" │");
println!("│ │");
println!("│ # In code: │");
println!("│ let client = ArchClient::builder() │");
println!("│ .from_env() │");
println!("│ .build()?; │");
println!("└──────────────────────────────────────────────────────────────┘\n");
println!("┌─ Example 6: Docker Container Usage ───────────────────────────┐");
println!("│ Dockerfile or docker-compose.yml: │");
println!("│ │");
println!("│ # Dockerfile │");
println!("│ ENV ARCH_TOOLKIT_TIMEOUT=60 │");
println!("│ ENV ARCH_TOOLKIT_MAX_RETRIES=3 │");
println!("│ │");
println!("│ # docker-compose.yml │");
println!("│ environment: │");
println!("│ - ARCH_TOOLKIT_TIMEOUT=60 │");
println!("│ - ARCH_TOOLKIT_MAX_RETRIES=3 │");
println!("│ │");
println!("│ # In code (same as CI/CD): │");
println!("│ let client = ArchClient::builder() │");
println!("│ .from_env() │");
println!("│ .build()?; │");
println!("└──────────────────────────────────────────────────────────────┘\n");
println!("✓ All examples completed successfully!");
println!("\n💡 Tip: Try setting different environment variables and running");
println!(" this example to see how configuration changes behavior.");
Ok(())
}