export type AbsenceType = 'cp' | 'mariage_pacs' | 'naissance' | 'conge_parental' | 'deces' | 'maladie'
export type AbsenceStatus = 'pending' | 'approved' | 'rejected' | 'cancelled'
export type HalfDay = 'matin' | 'apres_midi'

export type AbsenceUserRef = {
    '@id'?: string
    id: number
    username: string
    avatarUrl: string | null
}

export type AbsenceRequest = {
    '@id'?: string
    id: number
    user: AbsenceUserRef
    type: AbsenceType
    label: string
    startDate: string
    endDate: string
    startHalfDay: HalfDay | null
    endHalfDay: HalfDay | null
    countedDays: number
    reason: string | null
    justificationFileName: string | null
    justificationUrl: string | null
    status: AbsenceStatus
    rejectionReason: string | null
    createdAt: string
    reviewedAt: string | null
    reviewedBy: AbsenceUserRef | null
}

export type AbsenceRequestWrite = {
    type: AbsenceType
    startDate: string
    endDate: string
    startHalfDay?: HalfDay | null
    endHalfDay?: HalfDay | null
    reason?: string | null
}

export type AbsenceBalance = {
    '@id'?: string
    id: number
    user: AbsenceUserRef
    type: AbsenceType
    label: string
    period: string
    acquired: number
    acquiring: number
    acquiredTotal: number
    taken: number
    pending: number
    available: number
}

export type AbsencePolicy = {
    '@id'?: string
    id: number
    type: AbsenceType
    label: string
    daysPerYear: number | null
    daysPerEvent: number | null
    justificationRequired: boolean
    noticeDays: number
    countWorkingDaysOnly: boolean
    active: boolean
}

export type AbsencePolicyWrite = {
    daysPerYear?: number | null
    daysPerEvent?: number | null
    justificationRequired?: boolean
    noticeDays?: number
    countWorkingDaysOnly?: boolean
    active?: boolean
}

export type AbsencePreviewPayload = {
    type: AbsenceType
    startDate: string
    endDate: string
    startHalfDay?: HalfDay | null
    endHalfDay?: HalfDay | null
}

export type AbsencePreviewResult = {
    countedDays: number
    period: string | null
    available: number | null
    projectedAvailable: number | null
    justificationRequired: boolean
}
