import { prisma } from '@/lib/prisma'
import type { VisiteMedicaleCreateInput, VisiteMedicaleUpdateInput } from '@/validators/visites-medicales'

export async function listVisitesMedicales(limit: number, offset: number) {
  const [items, count] = await Promise.all([
    prisma.visites_medicales.findMany({
      orderBy: { id: 'desc' },
      take: limit,
      skip: offset,
      select: {
        id: true,
        id_salarie: true,
        datedde: true,
        dec: true,
        dvp: true,
        obv: true,
        mtc: true,
        apt: true,
        vmp: true,
        commentaire: true,
        dateprochainevm: true,
        daterappel: true,
        date_creation: true,
      },
    }),
    prisma.visites_medicales.count(),
  ])

  return { items, count }
}

export async function listVisitesMedicalesBySalarie(cos: number) {
  return prisma.visites_medicales.findMany({
    where: {
      id_salarie: cos,
    },
    orderBy: [
      {
        dvp: "desc",
      },
      {
        id: "desc",
      },
    ],
    select: {
      id: true,
      id_salarie: true,
      datedde: true,
      dec: true,
      dvp: true,
      obv: true,
      mtc: true,
      apt: true,
      vmp: true,
      commentaire: true,
      dateprochainevm: true,
      daterappel: true,
      date_creation: true,
    },
  });
}

export async function getVisiteMedicaleById(id: number) {
  return prisma.visites_medicales.findUnique({
    where: { id },
    select: {
      id: true,
      id_salarie: true,
      datedde: true,
      dec: true,
      dvp: true,
      obv: true,
      mtc: true,
      apt: true,
      vmp: true,
      commentaire: true,
      dateprochainevm: true,
      daterappel: true,
      date_creation: true,
    },
  })
}

export async function createVisiteMedicale(data: VisiteMedicaleCreateInput) {
  return prisma.visites_medicales.create({
    data,
    select: {
      id: true,
      id_salarie: true,
      datedde: true,
      dec: true,
      dvp: true,
      obv: true,
      mtc: true,
      apt: true,
      vmp: true,
      commentaire: true,
      dateprochainevm: true,
      daterappel: true,
      date_creation: true,
    },
  })
}

export async function updateVisiteMedicaleById(id: number, data: VisiteMedicaleUpdateInput) {
  const existingVisiteMedicale = await prisma.visites_medicales.findUnique({
    where: { id },
  })

  if (!existingVisiteMedicale) {
    return null
  }

  return prisma.visites_medicales.update({
    where: { id },
    data,
    select: {
      id: true,
      id_salarie: true,
      datedde: true,
      dec: true,
      dvp: true,
      obv: true,
      mtc: true,
      apt: true,
      vmp: true,
      commentaire: true,
      dateprochainevm: true,
      daterappel: true,
      date_creation: true,
    },
  })
}

export async function deleteVisiteMedicaleById(id: number) {
  const existingVisiteMedicale = await prisma.visites_medicales.findUnique({
    where: { id },
  })

  if (!existingVisiteMedicale) {
    return null
  }

  return prisma.visites_medicales.delete({
    where: { id },
    select: {
      id: true,
      id_salarie: true,
      datedde: true,
      dec: true,
      dvp: true,
      obv: true,
      mtc: true,
      apt: true,
      vmp: true,
      commentaire: true,
      dateprochainevm: true,
      daterappel: true,
      date_creation: true,
    },
  })
}
