package com.gxwebsoft.common.system.controller;

import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;

import javax.annotation.Resource;

/**
 * 微信登录控制器测试
 *
 * @author WebSoft
 * @since 2025-08-23
 */
@Slf4j
@SpringBootTest
@ActiveProfiles("dev")
public class WxLoginControllerTest {

    @Resource
    private UserService userService;

    /**
     * 测试从scene参数解析租户ID的逻辑
     */
    @Test
    public void testExtractTenantIdFromScene() {
        log.info("=== 开始测试scene参数解析 ===");

        // 测试用户ID 33103
        Integer testUserId = 33103;
        
        // 查询用户信息
        User user = userService.getByIdIgnoreTenant(testUserId);
        if (user != null) {
            log.info("用户ID {} 对应的租户ID: {}", testUserId, user.getTenantId());
            log.info("用户信息 - 用户名: {}, 手机: {}", user.getUsername(), user.getPhone());
        } else {
            log.warn("未找到用户ID: {}", testUserId);
        }

        // 测试不同的scene格式
        String[] testScenes = {
            "uid_33103",
            "uid_1",
            "uid_999999",
            "invalid_scene",
            null
        };

        for (String scene : testScenes) {
            log.info("测试scene: {} -> 预期解析结果", scene);
            // 这里模拟解析逻辑
            if (scene != null && scene.startsWith("uid_")) {
                try {
                    String userIdStr = scene.substring(4);
                    Integer userId = Integer.parseInt(userIdStr);
                    User testUser = userService.getByIdIgnoreTenant(userId);
                    if (testUser != null) {
                        log.info("  解析成功: 用户ID {} -> 租户ID {}", userId, testUser.getTenantId());
                    } else {
                        log.info("  用户不存在: 用户ID {} -> 默认租户ID 10550", userId);
                    }
                } catch (Exception e) {
                    log.info("  解析异常: {} -> 默认租户ID 10550", e.getMessage());
                }
            } else {
                log.info("  无效格式 -> 默认租户ID 10550");
            }
        }

        log.info("=== scene参数解析测试完成 ===");
    }

    /**
     * 测试查找特定用户
     */
    @Test
    public void testFindSpecificUsers() {
        log.info("=== 开始查找特定用户 ===");

        // 查找租户10550的用户
        Integer[] testUserIds = {1, 2, 3, 33103, 10001, 10002};
        
        for (Integer userId : testUserIds) {
            User user = userService.getByIdIgnoreTenant(userId);
            if (user != null) {
                log.info("用户ID: {}, 租户ID: {}, 用户名: {}, 手机: {}", 
                    userId, user.getTenantId(), user.getUsername(), user.getPhone());
            } else {
                log.info("用户ID: {} - 不存在", userId);
            }
        }

        log.info("=== 特定用户查找完成 ===");
    }

    /**
     * 测试URL解析
     */
    @Test
    public void testUrlParsing() {
        log.info("=== 开始测试URL解析 ===");

        String testUrl = "127.0.0.1:9200/api/wx-login/getOrderQRCodeUnlimited/uid_33103";
        log.info("测试URL: {}", testUrl);

        // 提取scene部分
        String[] parts = testUrl.split("/");
        String scene = parts[parts.length - 1]; // 最后一部分
        log.info("提取的scene: {}", scene);

        // 解析用户ID
        if (scene.startsWith("uid_")) {
            String userIdStr = scene.substring(4);
            try {
                Integer userId = Integer.parseInt(userIdStr);
                log.info("解析的用户ID: {}", userId);
                
                User user = userService.getByIdIgnoreTenant(userId);
                if (user != null) {
                    log.info("对应的租户ID: {}", user.getTenantId());
                } else {
                    log.warn("用户不存在");
                }
            } catch (NumberFormatException e) {
                log.error("用户ID格式错误: {}", userIdStr);
            }
        }

        log.info("=== URL解析测试完成 ===");
    }
}
