/**
 * Converter for "audio" message type.
 */

import type { ConvertedPayload, MessageConvertContext } from './types'
import { safeParse, formatDuration } from './utils'

export async function convertAudio(ctx: MessageConvertContext): Promise<ConvertedPayload | null> {
  const parsed = safeParse(ctx.rawContent) as { file_key?: string; duration?: number } | undefined
  const fileKey = parsed?.file_key
  if (!fileKey) return null

  const audioData = await ctx.downloadResource(fileKey, 'file')
  const durationSec = parsed?.duration ? Math.round(parsed.duration / 1000) : 0
  const durationText = parsed?.duration ? formatDuration(parsed.duration) : ''

  return {
    text: `[Voice message${durationText ? ` (${durationText})` : ''}]`,
    files: [{
      data: audioData,
      name: `voice_message${durationSec > 0 ? `_${durationSec}s` : ''}.mp3`,
      mimeType: 'audio/mpeg',
      size: audioData.length,
    }],
  }
}
