import { NextRequest, NextResponse } from 'next/server'
import { apiProviderRepo } from '@/lib/database/repositories/api-provider.repo'
import { modelRegistry } from '@/lib/engine/model-registry'
import { getBuiltinApiProvider } from '@/lib/api-provider-catalog'
import { isAuthError, requireUser } from '@/lib/auth/session'

/**
 * POST /api/api-providers/:id/refresh-models
 *
 * 强制刷新指定 provider 的模型列表。内置 provider 首次刷新时自动 upsert。
 */
export async function POST(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  let user
  try {
    user = await requireUser()
  } catch (err) {
    if (isAuthError(err)) return err
    throw err
  }

  const { id } = await params

  let existing = apiProviderRepo.findByIdAndUser(id, user.id)
  if (!existing) {
    const builtin = getBuiltinApiProvider(id)
    if (!builtin) return NextResponse.json({ error: 'Provider not found' }, { status: 404 })
    apiProviderRepo.upsertBuiltin(id, builtin.name, user.id)
    existing = apiProviderRepo.findByIdAndUser(id, user.id)
    if (!existing) return NextResponse.json({ error: 'Provider not found' }, { status: 404 })
  }

  try {
    const records = await modelRegistry.refreshProviderModels(id, user.id)
    const updated = apiProviderRepo.findByIdAndUser(id, user.id)
    return NextResponse.json({ provider: updated, models: records })
  } catch (err) {
    const errorMsg = err instanceof Error ? err.message : 'Refresh failed'
    return NextResponse.json({ error: errorMsg }, { status: 500 })
  }
}
