import { prisma } from '~/server/utils/prisma'
import { requireAuth } from '~/server/utils/auth'

export default defineEventHandler(async (event) => {
  const user = await requireAuth(event)
  const body = await readBody(event)

  const { recruitmentPostId, coverLetter, cvUrl } = body

  if (!recruitmentPostId) {
    throw createError({ statusCode: 400, statusMessage: 'recruitmentPostId requis' })
  }

  const post = await prisma.recruitmentPost.findUnique({ where: { id: Number(recruitmentPostId) } })
  if (!post || post.status !== 'open') {
    throw createError({ statusCode: 400, statusMessage: 'Offre non disponible' })
  }

  const existing = await prisma.candidature.findFirst({
    where: { recruitmentPostId: Number(recruitmentPostId), userId: user.id },
  })
  if (existing) {
    throw createError({ statusCode: 409, statusMessage: 'Vous avez déjà postulé à cette offre' })
  }

  const candidature = await prisma.candidature.create({
    data: {
      recruitmentPostId: Number(recruitmentPostId),
      userId: user.id,
      coverLetter: coverLetter || null,
      cvUrl: cvUrl || null,
      status: 'pending',
    },
    include: { recruitmentPost: true },
  })

  return candidature
})
