// src/server/socket.ts
import { Server } from 'socket.io';
import { createSocketAuthMiddleware } from './socket/middleware/auth.middleware';
import { ExamHandler } from './socket/handlers/exam.handler';

/**
 * Socket.IO 认证中间件
 * 可以在这里实现基于 token 或其他方式的认证
 */
export const authMiddleware = createSocketAuthMiddleware();

/**
 * Socket.IO 路由处理
 * 在这里定义所有的 Socket.IO 事件处理逻辑
 */
export default (io: Server) => {
  console.log('注册 Socket.IO 事件处理');

  // 初始化事件处理器
  const examHandler = new ExamHandler(io);
  
  // 全局命名空间事件
  io.on('connection', (socket) => {
    console.log(`客户端连接: ${socket.id}`);

    // 注册事件处理器
    examHandler.register(socket);
    
    // 示例: 响应客户端的 ping 事件
    socket.on('ping', (callback) => {
      callback({ timestamp: Date.now() });
    });
    
    // 断开连接事件
    socket.on('disconnect', (reason) => {
      console.log(`客户端断开连接: ${socket.id}, 原因: ${reason}`);
    });
  });
};