use qail_redis::{RedisDriver, RedisResult};
#[tokio::main]
async fn main() -> RedisResult<()> {
println!("🔌 Connecting to Redis...");
let mut driver = RedisDriver::connect("127.0.0.1", 6379).await?;
println!("📡 PING...");
let pong = driver.ping().await?;
assert!(pong, "PING should return PONG");
println!(" ✅ PONG received");
println!("📝 SET/GET...");
let key = "qail:test:hello";
driver.set(key, b"world").await?;
let value = driver.get_str(key).await?;
assert_eq!(value, Some("world".to_string()));
println!(" ✅ SET/GET works");
println!("⏱️ SET with TTL...");
let ttl_key = "qail:test:ttl";
driver.set_ex(ttl_key, b"expires", 60).await?;
let ttl = driver.ttl(ttl_key).await?;
assert!(ttl > 0 && ttl <= 60, "TTL should be between 1-60");
println!(" ✅ TTL is {} seconds", ttl);
println!("🔢 INCR...");
let counter_key = "qail:test:counter";
driver.del(counter_key).await?; let val1 = driver.incr(counter_key).await?;
let val2 = driver.incr(counter_key).await?;
let val3 = driver.incr(counter_key).await?;
assert_eq!(val1, 1);
assert_eq!(val2, 2);
assert_eq!(val3, 3);
println!(" ✅ INCR works: 1 → 2 → 3");
println!("🔍 EXISTS...");
let exists = driver.exists(key).await?;
assert!(exists, "Key should exist");
let not_exists = driver.exists("qail:nonexistent").await?;
assert!(!not_exists, "Key should not exist");
println!(" ✅ EXISTS works");
println!("🗑️ DEL...");
let deleted = driver.del(key).await?;
assert_eq!(deleted, 1);
let after_del = driver.get(key).await?;
assert!(after_del.is_none(), "Key should be deleted");
println!(" ✅ DEL works");
driver.del(ttl_key).await?;
driver.del(counter_key).await?;
println!("\n🎉 All integration tests passed!");
println!(" Postgres stores facts, Qdrant stores meaning, Redis stores time — QAIL decides.");
Ok(())
}