import { requireRole } from '~/server/utils/auth'
import { getPagination, paginatedResponse } from '~/server/utils/pagination'
import { prisma } from '~/server/utils/prisma'

export default defineEventHandler(async (event) => {
  await requireRole(event, 'admin', 'referent')
  const query = getQuery(event) as Record<string, string>
  const { page, perPage, skip, take } = getPagination(query)

  const where: Record<string, unknown> = {}
  if (query.search) {
    where.OR = [
      { prenom: { contains: query.search } },
      { nom: { contains: query.search } },
      { emailPersonnel: { contains: query.search } },
      { numeroInterneRh: { contains: query.search } },
    ]
  }
  if (query.statut) where.statutActuel = query.statut
  if (query.typeMembre) where.typeMembre = query.typeMembre

  const [data, total] = await Promise.all([
    prisma.member.findMany({
      where,
      skip,
      take,
      orderBy: [{ nom: 'asc' }, { prenom: 'asc' }],
      select: {
        id: true, prenom: true, nom: true, emailPersonnel: true, fonctionActuelle: true,
        typeMembre: true, statutActuel: true, numeroInterneRh: true, profilePhotoPath: true,
        dateEntreeAssociation: true, createdAt: true,
      },
    }),
    prisma.member.count({ where }),
  ])

  return paginatedResponse(data, total, page, perPage)
})
