package com.gxwebsoft.common.system.service;

import com.gxwebsoft.common.system.entity.User;
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 UserIgnoreTenantTest {

    @Resource
    private UserService userService;

    /**
     * 测试忽略租户隔离查询用户
     */
    @Test
    public void testGetByIdIgnoreTenant() {
        // 测试用户ID（请根据实际数据库中的用户ID进行调整）
        Integer testUserId = 1;

        log.info("=== 开始测试忽略租户隔离查询用户功能 ===");

        // 1. 使用普通方法查询用户（受租户隔离影响）
        User userNormal = userService.getById(testUserId);
        log.info("普通查询结果 - 用户ID: {}, 用户信息: {}", testUserId, 
            userNormal != null ? userNormal.getUsername() : "null");

        // 2. 使用忽略租户隔离方法查询用户
        User userIgnoreTenant = userService.getByIdIgnoreTenant(testUserId);
        log.info("忽略租户隔离查询结果 - 用户ID: {}, 用户信息: {}", testUserId, 
            userIgnoreTenant != null ? userIgnoreTenant.getUsername() : "null");

        // 3. 验证结果
        if (userIgnoreTenant != null) {
            log.info("✅ 忽略租户隔离查询成功！");
            log.info("用户详情 - ID: {}, 用户名: {}, 昵称: {}, 租户ID: {}", 
                userIgnoreTenant.getUserId(), 
                userIgnoreTenant.getUsername(), 
                userIgnoreTenant.getNickname(),
                userIgnoreTenant.getTenantId());
        } else {
            log.error("❌ 忽略租户隔离查询失败！");
        }

        log.info("=== 忽略租户隔离查询用户功能测试完成 ===");
    }

    /**
     * 测试参数验证
     */
    @Test
    public void testGetByIdIgnoreTenantValidation() {
        log.info("=== 开始测试参数验证 ===");

        // 测试null用户ID
        User result1 = userService.getByIdIgnoreTenant(null);
        log.info("null用户ID测试结果: {}", result1 == null ? "成功(返回null)" : "失败");

        // 测试不存在的用户ID
        User result2 = userService.getByIdIgnoreTenant(999999);
        log.info("不存在用户ID测试结果: {}", result2 == null ? "成功(返回null)" : "失败");

        log.info("=== 参数验证测试完成 ===");
    }

    /**
     * 测试跨租户查询
     */
    @Test
    public void testCrossTenantQuery() {
        log.info("=== 开始测试跨租户查询 ===");

        // 查询不同租户的用户（请根据实际数据调整）
        Integer[] testUserIds = {1, 2, 3, 4, 5};

        for (Integer userId : testUserIds) {
            User user = userService.getByIdIgnoreTenant(userId);
            if (user != null) {
                log.info("用户ID: {}, 用户名: {}, 租户ID: {}", 
                    user.getUserId(), user.getUsername(), user.getTenantId());
            } else {
                log.info("用户ID: {} - 不存在", userId);
            }
        }

        log.info("=== 跨租户查询测试完成 ===");
    }
}
