//! ResponseData 示例
//!
//! 这个示例展示了如何使用统一的 `data` 字段来处理单值和列表响应

use anycms_core::ApiResult;
use serde::Serialize;

#[derive(Debug, Serialize)]
struct User {
    id: u32,
    name: String,
}

fn main() {
    println!("=== ResponseData 示例 ===\n");

    // 1. 单值响应
    println!("1. 单值响应示例:");
    let user = User {
        id: 1,
        name: "Alice".to_string(),
    };
    let single_result: ApiResult<User> = ApiResult::value(user);
    let json = serde_json::to_string_pretty(&single_result).unwrap();
    println!("{}\n", json);

    // 验证 data 字段
    if let Some(data) = &single_result.data {
        println!("   - is_single: {}", data.is_single());
        println!("   - is_multiple: {}", data.is_multiple());
        if let Some(user) = data.as_single() {
            println!("   - User name: {}\n", user.name);
        }
    }

    // 2. 列表响应
    println!("2. 列表响应示例:");
    let users = vec![
        User {
            id: 1,
            name: "Alice".to_string(),
        },
        User {
            id: 2,
            name: "Bob".to_string(),
        },
        User {
            id: 3,
            name: "Charlie".to_string(),
        },
    ];
    let list_result: ApiResult<User> = ApiResult::list(users);
    let json = serde_json::to_string_pretty(&list_result).unwrap();
    println!("{}\n", json);

    // 验证 data 字段
    if let Some(data) = &list_result.data {
        println!("   - is_single: {}", data.is_single());
        println!("   - is_multiple: {}", data.is_multiple());
        if let Some(users) = data.as_multiple() {
            println!("   - Total users: {}\n", users.len());
        }
    }

    // 3. 空成功响应
    println!("3. 空成功响应示例:");
    let empty_result: ApiResult<()> = ApiResult::ok();
    let json = serde_json::to_string_pretty(&empty_result).unwrap();
    println!("{}\n", json);

    // 4. 错误响应
    println!("4. 错误响应示例:");
    let error_result: ApiResult<User> = ApiResult::fail("User not found").with_code(404);
    let json = serde_json::to_string_pretty(&error_result).unwrap();
    println!("{}\n", json);

    // 5. JSON 序列化对比
    println!("5. JSON 输出格式总结:");
    println!("   单值: {{\"success\":true,\"data\":{{...}}}}");
    println!("   列表: {{\"success\":true,\"data\":[...]}}");
    println!("   空值: {{\"success\":true}}");
    println!("   错误: {{\"success\":false,\"message\":\"...\",\"code\":...}}");
}
