import { ChatMessage } from "@db_models"

export default async (socket, payload, engine) => {
    if (!socket.userData) {
        throw new OperationError(401, "Unauthorized")
    }

    const created_at = new Date().getTime()

    const [from_user_id, to_user_id] = [socket.userData._id, payload.to_user_id]

    const wsMessageObj = {
        ...payload,
        created_at: created_at,
        user: socket.userData,
        _id: `msg:${from_user_id}:${created_at}`,
    }

    const doc = await ChatMessage.create({
        type: "user",
        from_user_id: from_user_id,
        to_user_id: to_user_id,
        content: payload.content,
        created_at: created_at,
    })

    socket.emit("chat:receive:message", wsMessageObj)

    const targetSocket = await engine.find.socketByUserId(payload.to_user_id)

    if (targetSocket) {
        await targetSocket.emit("chat:receive:message", wsMessageObj)
    }

    return doc
}