<?php

declare(strict_types=1);

namespace App\Service\WorkHours;

use App\Entity\Absence;
use App\Enum\HalfDay;

final class AbsenceSegmentsResolver
{
    /**
     * @return array{bool, bool}
     */
    public function resolveForDate(Absence $absence, string $dateYmd): array
    {
        $startDate = $absence->getStartDate()->format('Y-m-d');
        $endDate   = $absence->getEndDate()->format('Y-m-d');
        $startHalf = $absence->getStartHalf();
        $endHalf   = $absence->getEndHalf();

        // Cas d'une absence sur une seule date: on déduit matin/après-midi depuis les bornes.
        if ($startDate === $endDate) {
            if (HalfDay::AM === $startHalf && HalfDay::AM === $endHalf) {
                // Uniquement le matin absent.
                return [true, false];
            }
            if (HalfDay::PM === $startHalf && HalfDay::PM === $endHalf) {
                // Uniquement l'après-midi absent.
                return [false, true];
            }

            // Sinon, on considère la journée complète absente.
            return [true, true];
        }

        // Premier jour d'une absence multi-jours qui commence l'après-midi.
        if ($dateYmd === $startDate && HalfDay::PM === $startHalf) {
            return [false, true];
        }

        // Dernier jour d'une absence multi-jours qui se termine le matin.
        if ($dateYmd === $endDate && HalfDay::AM === $endHalf) {
            return [true, false];
        }

        // Les jours intermédiaires sont entièrement absents.
        return [true, true];
    }
}
