import {listAbsences, getAbsenceById, createAbsence, updateAbsenceById, deleteAbsenceById, listAbsenceBySalarie} from "@/services/absences.service"
import { toPublicAbsence, toPublicAbsenceList } from "@/server/public-entity";
import type { PublicAbsence, PublicFeed } from "@/types";
import type { absenceCreateInput, absenceUpdateInput } from "@/validators/absences";

export async function getAbsencesFeed(limit: number, offset: number): Promise<PublicFeed<PublicAbsence>> {
  const absences = await listAbsences(limit, offset);

  return {
    items: toPublicAbsenceList(absences),
    count: absences.length,
  };
}

export async function getAbsenceDetails(cos: number): Promise<{ absence: PublicAbsence | null | undefined }> {
  const absence = await getAbsenceById(cos);

  return {
    absence: toPublicAbsence(absence),
  };
}

export async function createAbsenceFeed(data: absenceCreateInput): Promise<{ absence: PublicAbsence | null | undefined }> {
  const absence = await createAbsence(data);

  return {
    absence: toPublicAbsence(absence),
  };
}

export async function updateAbsenceFeed(id: number, data: absenceUpdateInput): Promise<{ absence: PublicAbsence | null | undefined }> {
  const absence = await updateAbsenceById(id, data);

  return {
    absence: toPublicAbsence(absence),
  };
}

export async function deleteAbsenceFeed(id: number): Promise<{ absence: PublicAbsence | null | undefined }> {
  const absence = await deleteAbsenceById(id);

  return {
    absence: toPublicAbsence(absence),
  };
}

export async function getAbsenceBySalarieFeed(
  cos: number
){
  const absences = await listAbsenceBySalarie(cos);

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