/**
 * GET /api/chat/history?peer=<userId>[&before=<messageId>]
 * Returns the 1:1 conversation between the caller and `peer`, oldest → newest.
 * Gated to staff (IsSystemUser, non-limited role) — see chatAccess.gateFromEvent.
 */

import { gateFromEvent } from '../../utils/chatAccess'
import { getConversation } from '../../utils/chatDb'

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 query = getQuery(event)
  const peer = Number(query.peer)
  if (!peer) {
    setResponseStatus(event, 400)
    return { error: 'peer required' }
  }
  const before = query.before ? Number(query.before) : null

  return { records: getConversation(userId, peer, 50, before) }
})
