import { apiProviderRepo } from '@/lib/database/repositories/api-provider.repo'

interface SttConfig {
  api_key: string
  base_url: string
  model_name: string
}

function getSttConfig(): SttConfig | null {
  // Built-in STT provider row is a global singleton keyed by id='stt' (no
  // user_id filter). apiProviderRepo.findSttConfig mirrors the original
  // `SELECT api_key, base_url, model_name FROM api_providers WHERE id='stt'`
  // exactly — 返回 drizzle 推断的 camelCase 字段。
  const row = apiProviderRepo.findSttConfig()
  if (!row || !row.apiKey || !row.baseUrl || !row.modelName) return null
  return { api_key: row.apiKey, base_url: row.baseUrl, model_name: row.modelName }
}

/**
 * 将 WAV buffer 发送给配置的 STT 模型（OpenAI /v1/audio/transcriptions 兼容接口），
 * 返回识别出的文字；未配置或失败时返回 null。
 */
export async function transcribeAudio(wavBuffer: Buffer): Promise<string | null> {
  const config = getSttConfig()
  if (!config) return null

  const baseUrl = config.base_url.replace(/\/+$/, '')
  const url = baseUrl.includes('/v1')
    ? `${baseUrl}/audio/transcriptions`
    : `${baseUrl}/v1/audio/transcriptions`

  try {
    const blob = new Blob([new Uint8Array(wavBuffer)], { type: 'audio/wav' })
    const form = new FormData()
    form.append('file', blob, 'audio.wav')
    form.append('model', config.model_name)
    form.append('response_format', 'text')

    const res = await fetch(url, {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${config.api_key}`,
      },
      body: form,
      signal: AbortSignal.timeout(60_000),
    })

    if (!res.ok) {
      const errText = await res.text().catch(() => '')
      console.warn(`[STT] Transcription failed: HTTP ${res.status} ${errText}`)
      return null
    }

    const text = (await res.text()).trim()
    return text || null
  } catch (err) {
    console.warn('[STT] Transcription error:', err instanceof Error ? err.message : err)
    return null
  }
}
