fn main(): Unit with {Console, Http} = {
    Console.print("=== Lux HTTP Example ===")
    Console.print("")
    Console.print("Fetching data from httpbin.org...")
    Console.print("")
    match Http.get("https://httpbin.org/get") {
    Ok(response) => {
    Console.print("GET request successful!")
    Console.print("  Status: " + toString(response.status))
    Console.print("  Body length: " + toString(String.length(response.body)) + " bytes")
    Console.print("")
    match Json.parse(response.body) {
    Ok(json) => {
    Console.print("Parsed JSON response:")
    match Json.get(json, "origin") {
    Some(origin) => match Json.asString(origin) {
    Some(ip) => Console.print("  Your IP: " + ip),
    None => Console.print("  origin: (not a string)"),
},
    None => Console.print("  origin: (not found)"),
}
    match Json.get(json, "url") {
    Some(url) => match Json.asString(url) {
    Some(u) => Console.print("  URL: " + u),
    None => Console.print("  url: (not a string)"),
},
    None => Console.print("  url: (not found)"),
}
},
    Err(e) => Console.print("JSON parse error: " + e),
}
},
    Err(e) => Console.print("GET request failed: " + e),
}
    Console.print("")
    Console.print("--- POST Request ---")
    Console.print("")
    let requestBody = Json.object([("message", Json.string("Hello from Lux!")), ("version", Json.int(1))])
    Console.print("Sending POST with JSON body...")
    Console.print("  Body: " + Json.stringify(requestBody))
    Console.print("")
    match Http.postJson("https://httpbin.org/post", requestBody) {
    Ok(response) => {
    Console.print("POST request successful!")
    Console.print("  Status: " + toString(response.status))
    match Json.parse(response.body) {
    Ok(json) => match Json.get(json, "json") {
    Some(sentJson) => {
    Console.print("  Server received:")
    Console.print("    " + Json.stringify(sentJson))
},
    None => Console.print("  (no json field in response)"),
},
    Err(e) => Console.print("JSON parse error: " + e),
}
},
    Err(e) => Console.print("POST request failed: " + e),
}
    Console.print("")
    Console.print("--- Headers ---")
    Console.print("")
    match Http.get("https://httpbin.org/headers") {
    Ok(response) => {
    Console.print("Response headers (first 5):")
    let count = 0
    Console.print("  Total headers: " + toString(List.length(response.headers)))
},
    Err(e) => Console.print("Request failed: " + e),
}
}

let result = run main() with {}
