package cn.hztech.sdk.server;

import cn.hztech.sdk.api.RoleApiClient;
import cn.hztech.sdk.integration.BaseIntegrationTest;
import cn.hztech.sdk.model.PageResult;
import cn.hztech.sdk.model.entity.Role;
import cn.hztech.sdk.model.request.RoleListRequest;
import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

/**
 * Role API服务端集成测试
 * <p>
 * 测试角色管理相关的所有API接口
 * <p>
 * 前置条件：
 * <ul>
 *   <li>platform-server已启动（端口8080）</li>
 *   <li>使用test profile启动</li>
 *   <li>测试数据已加载（ROLE_001等）</li>
 * </ul>
 * <p>
 * 运行方式：
 * <pre>
 * # 启动服务器
 * cd sdk/platform-server
 * mvn spring-boot:run -Dspring.profiles.active=test
 *
 * # 运行测试
 * mvn test -Dtest=RoleApiClientServerIntegrationTest
 * </pre>
 *
 * @author SDK Team
 * @since 1.0.0
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class RoleApiClientServerIntegrationTest extends BaseIntegrationTest {

    private RoleApiClient roleApiClient;

    @BeforeEach
    void setUp() {
        roleApiClient = new RoleApiClient(httpClient);
    }

    @Test
    @Order(1)
    @DisplayName("测试查询角色详情 - 成功场景")
    void testGetDetail_Success() {
        System.out.println("\n=== 测试查询角色详情 ===");

        try {
            // Act - 执行API调用
            Role role = roleApiClient.getDetail("ROLE_001");

            // Assert - 验证结果
            assertNotNull(role, "角色不应为空");
            assertNotNull(role.getId(), "角色ID不应为空");
            assertEquals("ROLE_001", role.getId(), "角色ID应匹配");
            assertNotNull(role.getRoleName(), "角色名称不应为空");

            System.out.println("✓ 角色详情查询成功");
            System.out.println("  角色ID: " + role.getId());
            System.out.println("  角色名称: " + role.getRoleName());
            System.out.println("  角色编码: " + role.getRoleCode());
        } catch (Exception e) {
            System.err.println("✗ 角色详情查询失败: " + e.getMessage());
            e.printStackTrace();
            fail("角色详情查询失败: " + e.getMessage());
        }
    }

    @Test
    @Order(2)
    @DisplayName("测试查询角色列表 - 成功场景")
    void testGetList_Success() {
        System.out.println("\n=== 测试查询角色列表 ===");

        try {
            // Arrange - 准备测试数据
            RoleListRequest request = new RoleListRequest();
            request.setPageNum(1);
            request.setPageSize(10);

            // Act - 执行API调用
            PageResult<Role> pageResult = roleApiClient.getList(request);

            // Assert - 验证结果
            assertNotNull(pageResult, "分页结果不应为空");
            assertNotNull(pageResult.getList(), "角色列表不应为空");
            assertTrue(pageResult.getList().size() > 0, "角色列表应该有数据");
            assertNotNull(pageResult.getTotal(), "总数不应为空");

            System.out.println("✓ 角色列表查询成功");
            System.out.println("  总数: " + pageResult.getTotal());
            System.out.println("  当前页: " + pageResult.getPageNum());
            System.out.println("  页大小: " + pageResult.getPageSize());
            System.out.println("  角色数: " + pageResult.getList().size());

            // 输出第一个角色信息
            if (!pageResult.getList().isEmpty()) {
                Role firstRole = pageResult.getList().get(0);
                System.out.println("  第一个角色: " + firstRole.getRoleName());
            }
        } catch (Exception e) {
            System.err.println("✗ 角色列表查询失败: " + e.getMessage());
            e.printStackTrace();
            fail("角色列表查询失败: " + e.getMessage());
        }
    }
}
