<?php

namespace App\Insurance\Service;

use App\Clinic\Repository\ClinicRepository;
use App\Doctor\Entity\Doctor;
use App\Insurance\Entity\EntityInsurancePricing;
use App\Insurance\Repository\EntityInsurancePricingRepository;

/**
 * فلگ «الزامی کردن هزینه ویزیت» را برای پزشکِ یک نوبت resolve می‌کند:
 * ردیف قیمت‌گذاری خود پزشک اگر موجود باشد؛ وگرنه کلینیکِ واحد پزشک
 * (همان ترتیب resolve کردن tenant در PatientService).
 */
class VisitPriceRequirementResolver
{
    public function __construct(
        private readonly EntityInsurancePricingRepository $pricingRepo,
        private readonly ClinicRepository $clinicRepo,
    ) {}

    public function isRequiredForDoctor(Doctor $doctor): bool
    {
        $row = $this->pricingRepo->findOneForInsurance(EntityInsurancePricing::TYPE_DOCTOR, $doctor->getId(), null);
        if ($row !== null) {
            return $row->isRequireVisitPrice();
        }

        $clinics = $this->clinicRepo->findByDoctor($doctor);
        if (count($clinics) === 1) {
            return $this->pricingRepo
                ->findOneForInsurance(EntityInsurancePricing::TYPE_CLINIC, $clinics[0]->getId(), null)
                ?->isRequireVisitPrice() ?? false;
        }

        return false;
    }
}
