<?php

namespace App\Appointment\ValueObject;

use App\ClinicService\Entity\ServiceItem;

/**
 * نتیجهٔ محاسبهٔ مدت یک ترکیب سرویس در حالت نوبت‌دهی سرویسی.
 *
 * `bufferMinutes` فاصلهٔ بین دو نوبت است و **جزو مدت نوبت نیست**: زمان پایانِ ذخیره‌شدهٔ
 * نوبت `start + totalMinutes` است، نه `start + totalMinutes + buffer`. همان قاعده‌ای که
 * {@see \App\Appointment\Service\SlotCalculatorService::getServiceStartTimes()} دارد.
 */
final readonly class ServiceBookingDuration
{
    /**
     * @param ServiceItem[] $serviceItems به ترتیب uuidهای ورودی
     * @param string[]      $warnings     پیام‌های فارسی برای نمایش؛ مانع عملیات نیستند
     */
    public function __construct(
        public int $totalMinutes,
        public int $bufferMinutes,
        public array $serviceItems,
        public array $warnings = [],
    ) {}

    /** زمان پایان نوبت برای یک زمان شروع مشخص — بدون بافر. */
    public function endFor(int $slotStart): int
    {
        return $slotStart + $this->totalMinutes * 60;
    }
}
