<?php

namespace App\Appointment\Availability\ValueObject;

use App\Resource\Entity\ClinicResource;

/**
 * کدام منبع برای کدام نقش پیشنهاد می‌شود.
 *
 * تخصیص per **نقش** است نه per بخش: همان اپراتور در بخش ۱ و بخش ۳ حاضر است، نه دو
 * نفر — و همین باعث می‌شود بخشِ میانی که او را نمی‌خواهد، واقعاً آزادش کند.
 */
final readonly class SlotAssignment
{
    /** @param array<string, list<ClinicResource>> $byRole */
    public function __construct(public array $byRole) {}

    public function toArray(): array
    {
        $out = [];

        foreach ($this->byRole as $role => $resources) {
            $out[$role] = array_map(
                static fn (ClinicResource $r): array => [
                    'uuid' => $r->getUuid(),
                    'name' => $r->getName(),
                ],
                $resources,
            );
        }

        return $out;
    }
}
