/**
 * POST /api/push/register-native  { token, platform } → { ok }
 *
 * Stores the bundled app's FCM device token for the (staff) user so chat DMs can ring the device when
 * the app is backgrounded/killed. Auth reuses the app's token flow: the app sends Authorization:
 * Bearer + X-Logship-*; server/middleware/00.app-auth.ts maps those to cookies, and gateFromEvent()
 * resolves the user + asserts staff access (throws 401/403 otherwise). Web push is unaffected.
 */

import { gateFromEvent } from '../../utils/chatAccess'
import { saveFcmToken } from '../../utils/fcmDb'

export default defineEventHandler(async (event) => {
  if (useRuntimeConfig().chatEnabled !== true) return { ok: false }

  let userId: number, roleId: number
  try {
    ({ userId, roleId } = await gateFromEvent(event)) // 401/403 if not eligible staff
  } catch {
    setResponseStatus(event, 401)
    return { ok: false }
  }

  const body = await readBody(event)
  const token = String(body?.token || '').trim()
  if (!token) {
    setResponseStatus(event, 400)
    return { ok: false, error: 'token required' }
  }

  saveFcmToken(userId, roleId, token, String(body?.platform || 'android'))
  return { ok: true }
})
