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

/**
 * GET /api/telephony/blacklist?numbers=a,b,c   (or ?number=a)
 *
 * Admin-only (same gate as blacklist.post.ts). Live FreePBX blacklist status of up to 50
 * numbers, read from astdb via AMI DBGet over one session:
 *   { status: 200, available: true, entries: { "<number>": { blocked, description } } }
 * Fail-soft: when the PBX is unreachable → { status: 200, available: false, entries: {} }
 * so the UI shows "status unknown" instead of an error.
 */
export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  if ((config as any).asterisk?.enabled !== true) return { status: 200, available: false, entries: {}, 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 q = getQuery(event)
  const numbers = [...new Set(`${q.numbers || ''},${q.number || ''}`.split(',').map((n) => n.trim()).filter(Boolean))].filter(isValidBlacklistNumber)
  if (!numbers.length) return { status: 200, available: true, entries: {} }

  try {
    return { status: 200, available: true, entries: await getBlacklistStatus(numbers) }
  } catch (err: any) {
    console.warn('[blacklist] status failed:', err?.statusMessage || err?.message || err)
    return { status: 200, available: false, entries: {}, message: err?.statusMessage || 'Telefonanlage nicht erreichbar' }
  }
})
