import { isAdminVerified } from '../../utils/mobileReleases'
import { addToBlacklist, randomBlacklistDescription, isValidBlacklistNumber } from '../../utils/telephony/blacklist'

/**
 * POST /api/telephony/blacklist  { number, label? }
 *
 * Admin-only (server-verified, mirrors recent-calls.get.ts). Adds `number` to
 * the FreePBX Blacklist so future inbound calls from it are rejected —
 * effective immediately, see server/utils/telephony/blacklist.ts. FreePBX's
 * own admin UI treats "Description" as mandatory; we always synthesize a
 * non-blank one since it's never shown anywhere in this app.
 */
export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  if ((config as any).asterisk?.enabled !== true) return { status: 503, message: 'Telefonanlage nicht aktiviert' }

  const token = await getTokenHelper(event)
  if (!token) throw createError({ statusCode: 401, statusMessage: 'Unauthorized' })
  const admin = await isAdminVerified(event, token)
  if (!admin) throw createError({ statusCode: 403, statusMessage: 'Nur für Administratoren' })

  const body: any = await readBody(event).catch(() => ({}))
  const number = String(body?.number || '').trim()
  if (!isValidBlacklistNumber(number)) {
    return { status: 400, message: 'Ungültige Telefonnummer' }
  }

  try {
    const description = randomBlacklistDescription(String(body?.label || ''))
    await addToBlacklist(number, description)
    return { status: 200, number, description }
  } catch (err: any) {
    console.warn('[blacklist] add failed:', err?.statusMessage || err?.message || err)
    return { status: Number(err?.statusCode || 502), message: err?.statusMessage || 'Sperren fehlgeschlagen' }
  }
})
