package cn.hztech.sdk.server;

import cn.hztech.sdk.api.MenuApiClient;
import cn.hztech.sdk.integration.BaseIntegrationTest;
import cn.hztech.sdk.model.entity.Menu;
import cn.hztech.sdk.model.request.MenuQueryRequest;
import org.junit.jupiter.api.*;

import java.util.List;

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

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

    private MenuApiClient menuApiClient;

    @BeforeEach
    void setUp() {
        menuApiClient = new MenuApiClient(httpClient);
    }

    @Test
    @Order(1)
    @DisplayName("测试查询菜单数据 - 成功场景")
    void testQuery_Success() {
        System.out.println("\n=== 测试查询菜单数据 ===");

        try {
            // Arrange - 准备测试数据
            MenuQueryRequest request = new MenuQueryRequest();

            // Act - 执行API调用
            List<Menu> menuTree = (List<Menu>) menuApiClient.query(request);

            // Assert - 验证结果
            assertNotNull(menuTree, "菜单树不应为空");
            assertTrue(menuTree.size() > 0, "菜单树应该有数据");

            // 验证树结构
//            Menu rootMenu = menuTree.get(0);
//            assertNotNull(rootMenu.getId(), "根菜单ID不应为空");
//            assertNotNull(rootMenu.getMenuName(), "根菜单名称不应为空");
//
//            System.out.println("✓ 菜单查询成功");
//            System.out.println("  根菜单数: " + menuTree.size());
//            System.out.println("  第一个根菜单: " + rootMenu.getMenuName());
//            System.out.println("  菜单类型: " + rootMenu.getMenuType());

//            // 如果有子菜单,输出子菜单数量
//            if (rootMenu.getChildren() != null && !rootMenu.getChildren().isEmpty()) {
//                System.out.println("  子菜单数: " + rootMenu.getChildren().size());
//            }
        } catch (Exception e) {
            System.err.println("✗ 菜单查询失败: " + e.getMessage());
            e.printStackTrace();
            fail("菜单查询失败: " + e.getMessage());
        }
    }
}
