import { NextRequest, NextResponse } from 'next/server'
import { modelRegistry } from '@/lib/engine/model-registry'
import { isAuthError, requireUser } from '@/lib/auth/session'
import type { ModelEntry } from '@/lib/models'

function mapRecordToEntry(r: Awaited<ReturnType<typeof modelRegistry.getAvailableModels>>[number]): ModelEntry {
  return {
    id: r.id,
    label: r.label,
    provider: r.providerName || r.providerId,
    providerId: r.providerId,
    aliases: r.aliases || [],
    capabilities: r.capabilities,
    status: r.status,
  }
}

/**
 * GET /api/models — 返回当前用户可用的模型列表。
 *
 * - 未配置/未认证的 provider 的模型不会返回。
 * - 传 ?refresh=1 会强制刷新所有 provider 的模型列表。
 */
export async function GET(req: NextRequest) {
  let user
  try {
    user = await requireUser()
  } catch (err) {
    if (isAuthError(err)) return err
    throw err
  }

  const { searchParams } = new URL(req.url)
  const refresh = searchParams.get('refresh') === '1'

  if (refresh) {
    await modelRegistry.refreshAll(user.id)
  }

  const records = await modelRegistry.getAvailableModels(user.id)
  const models: ModelEntry[] = records.map(mapRecordToEntry)
  return NextResponse.json(models)
}
