/**
 * API endpoint para Web Share Target
 * POST /api/share-target
 *
 * Recibe imágenes compartidas desde otras apps y las almacena temporalmente
 */
import { promises as fs } from 'fs'
import { join } from 'path'
import { createHash, randomBytes } from 'crypto'

const MAX_FILE_SIZE = 5 * 1024 * 1024 // 5MB
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp', 'image/jpg']
const TEMP_DIR = 'public/temp-shared'

export default defineEventHandler(async (event) => {
  try {
    // Leer el body como multipart/form-data
    const formData = await readMultipartFormData(event)

    if (!formData || formData.length === 0) {
      // No hay archivo, redirigir a inicio
      return sendRedirect(event, '/', 302)
    }

    // Buscar el campo 'media' (nombre definido en manifest)
    const mediaFile = formData.find(field => field.name === 'media')

    if (!mediaFile) {
      // No hay imagen, redirigir a inicio
      return sendRedirect(event, '/', 302)
    }

    // Validar tipo de archivo
    const contentType = mediaFile.type || ''
    if (!ALLOWED_TYPES.includes(contentType)) {
      console.error('Tipo de archivo no permitido:', contentType)
      return sendRedirect(event, '/', 302)
    }

    // Validar tamaño
    if (mediaFile.data.length > MAX_FILE_SIZE) {
      console.error('Archivo muy grande:', mediaFile.data.length)
      return sendRedirect(event, '/', 302)
    }

    // Crear directorio temporal si no existe
    const tempPath = join(process.cwd(), TEMP_DIR)
    try {
      await fs.access(tempPath)
    } catch {
      await fs.mkdir(tempPath, { recursive: true })
    }

    // Generar token único para este archivo temporal
    const token = randomBytes(16).toString('hex')
    const timestamp = Date.now()
    const extension = contentType.split('/')[1]
    const filename = `shared-${token}-${timestamp}.${extension}`
    const filepath = join(tempPath, filename)

    // Guardar archivo temporal
    await fs.writeFile(filepath, mediaFile.data)

    // URL pública del archivo temporal
    const tempUrl = `/temp-shared/${filename}`

    console.log(`✅ Imagen compartida guardada temporalmente: ${tempUrl}`)

    // Redirigir a la página principal con el token
    return sendRedirect(event, `/?shared=${token}&file=${encodeURIComponent(filename)}`, 302)
  } catch (error: any) {
    console.error('Error en share-target:', error)
    return sendRedirect(event, '/', 302)
  }
})
