use athena_rs::drivers::postgresql::sqlx_driver::{describe_bind_value, describe_bind_values};
use serde_json::json;

#[test]
fn describe_bind_value_handles_uuid_like_strings_as_text() {
    let old_format_id = json!("aecd8e47-c92d-44f2-b150-abcdef123456");
    let description = describe_bind_value(&old_format_id);
    assert!(
        description.contains("(string)"),
        "UUID-like string should be described as string, got: {}",
        description
    );

    let new_format_id = json!("aAycr5gho2AKXSa022yvbsL1");
    let description = describe_bind_value(&new_format_id);
    assert!(
        description.contains("(string)"),
        "Alphanumeric ID should be described as string, got: {}",
        description
    );
}

#[test]
fn describe_bind_value_handles_various_types() {
    assert_eq!(describe_bind_value(&json!(null)), "null (null)");
    assert_eq!(describe_bind_value(&json!(true)), "true (bool)");
    assert_eq!(describe_bind_value(&json!(false)), "false (bool)");
    assert_eq!(describe_bind_value(&json!(42)), "42 (i64)");
    assert_eq!(describe_bind_value(&json!(2.5)), "2.5 (f64)");
    assert_eq!(describe_bind_value(&json!("hello")), "hello (string)");
    assert_eq!(describe_bind_value(&json!([1, 2, 3])), "array(len=3)");
    assert_eq!(
        describe_bind_value(&json!({"key": "value"})),
        "object(len=1)"
    );
}

#[test]
fn describe_bind_values_handles_mixed_id_formats() {
    let values = vec![
        json!("aecd8e47-c92d-44f2-b150-abcdef123456"),
        json!("aAycr5gho2AKXSa022yvbsL1"),
        json!("AL046ozwXS8XQOXV4BmVaPBc"),
    ];

    let descriptions = describe_bind_values(&values);

    for (i, desc) in descriptions.iter().enumerate() {
        assert!(
            desc.contains("(string)"),
            "Value {} should be described as string, got: {}",
            i,
            desc
        );
    }
}
