/**
 * Converter for "video" and "media" message types.
 */

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

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

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

  return {
    text: `[Video${durationText ? ` (${durationText})` : ''}]`,
    files: [{
      data: videoData,
      name: parsed?.file_name || `video${durationSec > 0 ? `_${durationSec}s` : ''}.mp4`,
      mimeType: 'video/mp4',
      size: videoData.length,
    }],
  }
}
