import { Socket, ExtendedError } from "socket.io";
import jwt from "jsonwebtoken";

const secretKey = process.env.JWT_SECRET || 'your_secret_key';

export const socketAuthentication = (socket: Socket, next: (err?: ExtendedError) => void): void => {
    const token = socket.handshake.auth?.token || socket.handshake.query?.token;

    if (!token) {
        return next(new Error('Authentication error: Token missing'));
    }

    jwt.verify(token, secretKey, (err: any, decoded: any) => {
        if (err) {
          return next(new Error('Authentication error: Invalid token'));
        }

        (socket as any).user = decoded;
        next();
    });
}