/**
 * POST /api/chat/read   body: { peer: <userId> }
 * Marks all messages from `peer` to the caller as read, and notifies the
 * caller's other tabs (multi-tab unread sync) via the presence registry.
 * Gated to staff.
 */

import { gateFromEvent } from '../../utils/chatAccess'
import { markConversationRead } from '../../utils/chatDb'
import { sendToUser } from '../../utils/chatPresence'

export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  if (config.chatEnabled !== true) {
    setResponseStatus(event, 404)
    return { error: 'chat disabled' }
  }

  let userId: number
  try {
    ({ userId } = await gateFromEvent(event))
  } catch (err: any) {
    setResponseStatus(event, err?.statusCode || 403)
    return { error: 'forbidden' }
  }

  const body = await readBody(event)
  const peer = Number(body?.peer)
  if (!peer) {
    setResponseStatus(event, 400)
    return { error: 'peer required' }
  }

  const changed = markConversationRead(userId, peer, Date.now())
  // Keep the reader's other tabs in sync.
  sendToUser(userId, { type: 'read', peer })
  // Tell the original sender (`peer`) their messages were read — ✓✓ receipt.
  sendToUser(peer, { type: 'read-receipt', peer: userId })

  return { status: 200, changed }
})
