import { NextRequest, NextResponse } from 'next/server'
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'

const s3Client = new S3Client({
  region: 'ru-1',
  endpoint: 'https://s3.twcstorage.ru',
  credentials: {
    accessKeyId: 'I6XD2OR7YO2ZN6L6Z629',
    secretAccessKey: '9xCOoafisG0aB9lJNvdLO1UuK73fBvMcpHMdijrJ'
  },
  forcePathStyle: true
})

const BUCKET_NAME = '617774af-sfera'

export async function POST(request: NextRequest) {
  try {
    const formData = await request.formData()
    const file = formData.get('file') as File
    const userId = formData.get('userId') as string

    if (!file || !userId) {
      return NextResponse.json(
        { error: 'File and userId are required' },
        { status: 400 }
      )
    }

    // Проверяем тип файла (поддерживаем аудио форматы)
    if (!file.type.startsWith('audio/')) {
      return NextResponse.json(
        { error: 'Only audio files are allowed' },
        { status: 400 }
      )
    }

    // Ограничиваем размер файла (10MB для голосовых сообщений)
    if (file.size > 10 * 1024 * 1024) {
      return NextResponse.json(
        { error: 'File size must be less than 10MB' },
        { status: 400 }
      )
    }

    // Генерируем уникальное имя файла
    const timestamp = Date.now()
    const extension = file.name.split('.').pop() || 'wav'
    const key = `voice-messages/${userId}/${timestamp}.${extension}`

    // Конвертируем файл в Buffer
    const buffer = Buffer.from(await file.arrayBuffer())

    // Загружаем в S3
    const command = new PutObjectCommand({
      Bucket: BUCKET_NAME,
      Key: key,
      Body: buffer,
      ContentType: file.type,
      ACL: 'public-read'
    })

    await s3Client.send(command)

    // Возвращаем URL файла и метаданные
    const url = `https://s3.twcstorage.ru/${BUCKET_NAME}/${key}`

    return NextResponse.json({
      success: true,
      url,
      key,
      duration: 0, // Длительность будет вычислена на фронтенде
      size: file.size
    })

  } catch (error) {
    console.error('Error uploading voice message:', error)
    return NextResponse.json(
      { error: 'Failed to upload voice message' },
      { status: 500 }
    )
  }
} 