import {
  listVisitesMedicales,
  getVisiteMedicaleById,
  listVisitesMedicalesBySalarie,
  createVisiteMedicale,
  updateVisiteMedicaleById,
  deleteVisiteMedicaleById,
} from '@/services/visites-medicales.service'
import { omitInternalId, omitInternalIdList } from '@/server/public-entity'
import type { PublicFeed, PublicVisiteMedicale } from '@/types'
import type { VisiteMedicaleCreateInput, VisiteMedicaleUpdateInput } from '@/validators/visites-medicales'

export async function getVisitesMedicalesFeed(limit: number, offset: number): Promise<PublicFeed<PublicVisiteMedicale>> {
  const { items, count } = await listVisitesMedicales(limit, offset)
  return { items: omitInternalIdList(items), count }
}

export async function getVisitesMedicalesBySalarieFeed(cos: number) {
  const items = await listVisitesMedicalesBySalarie(cos);

  return {
    items,
    count: items.length,
  };
}

export async function getVisiteMedicaleDetails(id: number): Promise<{ visiteMedicale: PublicVisiteMedicale | null | undefined }> {
  const visiteMedicale = await getVisiteMedicaleById(id)
  return { visiteMedicale: omitInternalId(visiteMedicale) }
}

export async function createVisiteMedicaleFeed(data: VisiteMedicaleCreateInput): Promise<{ visiteMedicale: PublicVisiteMedicale | null | undefined }> {
  const visiteMedicale = await createVisiteMedicale(data)
  return { visiteMedicale: omitInternalId(visiteMedicale) }
}

export async function updateVisiteMedicaleFeed(id: number, data: VisiteMedicaleUpdateInput): Promise<{ visiteMedicale: PublicVisiteMedicale | null | undefined }> {
  const visiteMedicale = await updateVisiteMedicaleById(id, data)
  return { visiteMedicale: omitInternalId(visiteMedicale) }
}

export async function deleteVisiteMedicaleFeed(id: number): Promise<{ visiteMedicale: PublicVisiteMedicale | null | undefined }> {
  const visiteMedicale = await deleteVisiteMedicaleById(id)
  return { visiteMedicale: omitInternalId(visiteMedicale) }
}
