<?php

namespace App\Package\Entity;

use App\ClinicService\Entity\ServiceItem;
use Doctrine\ORM\Mapping as ORM;

/**
 * سرویس‌هایی که یک پکیج پوشش می‌دهد.
 *
 * حذف سرویس `RESTRICT` است: سرویسی که در پکیجِ فروخته‌شده هست اگر برود، اعتبار
 * بیمارانی که خریده‌اند بی‌معنا می‌شود.
 */
#[ORM\Entity]
#[ORM\Table(name: 'package_services')]
#[ORM\UniqueConstraint(name: 'uniq_pkg_service', columns: ['package_id', 'service_item_id'])]
class PackageService
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private ?int $id = null;

    #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'services')]
    #[ORM\JoinColumn(name: 'package_id', nullable: false, onDelete: 'CASCADE')]
    private Package $package;

    #[ORM\ManyToOne(targetEntity: ServiceItem::class)]
    #[ORM\JoinColumn(name: 'service_item_id', nullable: false, onDelete: 'RESTRICT')]
    private ServiceItem $serviceItem;

    public function __construct(Package $package, ServiceItem $serviceItem)
    {
        $this->package     = $package;
        $this->serviceItem = $serviceItem;

        $package->addService($this);
    }

    public function getId(): ?int                 { return $this->id; }
    public function getPackage(): Package         { return $this->package; }
    public function getServiceItem(): ServiceItem { return $this->serviceItem; }
}
