package com.zhentao.controller;

import com.zhentao.service.OnlineUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 在线状态查询控制器
 */
@RestController
@RequestMapping("/api/online")
@CrossOrigin(origins = "*")
public class OnlineStatusController {

    @Autowired
    private OnlineUserService onlineUserService;

    /**
     * 检查用户是否在线
     * @param userId 用户ID（支持普通用户ID和红娘IM ID，如 "123" 或 "m_22"）
     * @return 在线状态
     */
    @GetMapping("/checkStatus")
    public Map<String, Object> checkUserOnlineStatus(@RequestParam("userId") String userId) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            // 将字符串 userId 转换为 Long（如果是红娘ID "m_22"，需要特殊处理）
            Long userIdLong;
            if (userId.startsWith("m_")) {
                // 红娘ID格式：m_22 -> 提取数字部分
                // 注意：这里假设 OnlineUserService 使用的是红娘的 matchmaker_id
                // 如果需要使用完整的 IM ID，需要修改 OnlineUserService
                userIdLong = Long.parseLong(userId.substring(2));
            } else {
                // 普通用户ID
                userIdLong = Long.parseLong(userId);
            }
            
            boolean isOnline = onlineUserService.isUserOnline(userIdLong);
            
            Map<String, Object> data = new HashMap<>();
            data.put("userId", userId);  // 返回原始 userId
            data.put("online", isOnline);
            data.put("timestamp", System.currentTimeMillis());
            
            result.put("code", 200);
            result.put("message", "查询成功");
            result.put("data", data);
            
            System.out.println("查询用户 " + userId + " 在线状态: " + (isOnline ? "在线" : "离线"));
        } catch (NumberFormatException e) {
            System.err.println("无效的用户ID格式: " + userId);
            result.put("code", 400);
            result.put("message", "无效的用户ID格式");
            result.put("data", null);
        } catch (Exception e) {
            System.err.println("查询在线状态失败: " + e.getMessage());
            result.put("code", 500);
            result.put("message", "查询失败: " + e.getMessage());
            result.put("data", null);
        }
        
        return result;
    }

    /**
     * 批量检查用户在线状态
     * @param userIds 用户ID列表（逗号分隔）
     * @return 在线状态列表
     */
    @GetMapping("/batchCheckStatus")
    public Map<String, Object> batchCheckUserOnlineStatus(@RequestParam("userIds") String userIds) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            String[] userIdArray = userIds.split(",");
            Map<Long, Boolean> statusMap = new HashMap<>();
            
            for (String userIdStr : userIdArray) {
                try {
                    Long userId = Long.parseLong(userIdStr.trim());
                    boolean isOnline = onlineUserService.isUserOnline(userId);
                    statusMap.put(userId, isOnline);
                } catch (NumberFormatException e) {
                    System.err.println("无效的用户ID: " + userIdStr);
                }
            }
            
            result.put("code", 200);
            result.put("message", "查询成功");
            result.put("data", statusMap);
        } catch (Exception e) {
            System.err.println("批量查询在线状态失败: " + e.getMessage());
            result.put("code", 500);
            result.put("message", "查询失败: " + e.getMessage());
            result.put("data", null);
        }
        
        return result;
    }

    /**
     * 获取在线用户总数
     * @return 在线用户数量
     */
    @GetMapping("/count")
    public Map<String, Object> getOnlineUserCount() {
        Map<String, Object> result = new HashMap<>();
        
        try {
            long count = onlineUserService.getOnlineUserCount();
            
            result.put("code", 200);
            result.put("message", "查询成功");
            result.put("data", count);
        } catch (Exception e) {
            System.err.println("获取在线用户数量失败: " + e.getMessage());
            result.put("code", 500);
            result.put("message", "查询失败: " + e.getMessage());
            result.put("data", 0);
        }
        
        return result;
    }
}
