/**
 * GET /api/accounting/incoming-invoices/config
 * Current extraction-engine config for the settings page. The API key is NEVER
 * returned (only `hasKey`). Merges env (runtimeConfig) with per-org overrides
 * stored as an AD_Preference.
 */
import refreshTokenHelper from '../../../utils/refreshTokenHelper'
import errorHandlingHelper from '../../../utils/errorHandlingHelper'
import { getInboxConfig } from '../../../utils/inbox/inboxDb'
import { getInboxScope, buildInboxCtx } from '../../../utils/inbox/scope'

const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const scope = getInboxScope(event)
  if (!scope.orgId) return { status: 401 }
  const env: any = (useRuntimeConfig() as any)?.ap?.llm || {}
  let override: any = {}
  try { override = (await getInboxConfig(buildInboxCtx(event, token), 'llm')) || {} } catch {}
  return {
    status: 200,
    llm: {
      enabled: (override.enabled ?? env.enabled) === true,
      provider: override.provider || env.provider || 'compatible',
      baseUrl: override.baseUrl || env.baseUrl || '',
      model: override.model || env.model || '',
      mode: override.mode || env.mode || 'assisted',
      threshold: Number(override.threshold ?? env.threshold ?? 0.6),
      hasKey: !!env.apiKey,
      envEnabled: env.enabled === true
    }
  }
}

export default defineEventHandler(async (event) => {
  try {
    return await handleFunc(event)
  } catch (err: any) {
    try {
      return await handleFunc(event, await refreshTokenHelper(event))
    } catch (error: any) {
      return errorHandlingHelper(err?.data ?? err, error?.data ?? error)
    }
  }
})
