<?php

namespace App\Secretary\Service;

use App\Payment\Entity\Payment;
use App\Secretary\Repository\DoctorSecretaryRepository;

/**
 * منشی‌هایی که از یک نوبت **آنلاین** سهم می‌برند.
 *
 * «آنلاین» یعنی همین مسیر: تقسیم مالی تنها از `PaymentManager` (پرداخت موفق درگاه)
 * صدا زده می‌شود؛ نوبتی که در پنل ثبت و قطعی می‌شود از این مسیر عبور نمی‌کند و سهمی
 * نمی‌سازد. انتساب بر پایهٔ محیط نوبت است: کلینیک نوبت، وگرنه خودِ پزشک.
 */
class SecretaryShareResolver
{
    public function __construct(
        private readonly DoctorSecretaryRepository $secretaryRepo,
    ) {}

    /**
     * @return list<array{user: \App\Auth\Entity\User, percent: float, relation_uuid: string}>
     */
    public function for(Payment $payment): array
    {
        $appointment = $payment->getAppointment();
        if ($appointment === null) {
            return [];
        }

        $rows = $this->secretaryRepo->findOnlineShareRows($appointment->getDoctor(), $appointment->getClinic());

        return array_values(array_map(static fn($row) => [
            'user'          => $row->getSecretary(),
            'percent'       => $row->effectiveOnlineSharePercent(),
            'relation_uuid' => $row->getUuid(),
        ], $rows));
    }
}
