<?php  namespace App\Services\Orders;  use App\Contracts\DiscountableItem; use App\Services\Orders\Discounts\DiscountReturnObject; use App\Services\Orders\Discounts\GeneralDiscountReturnObject;  abstract class OrderProduct { 	protected int $quantity = 0; 	protected array $discounts = []; 	protected ?string $taxRate = '0.00'; 	protected bool $generalDiscountApplied = false; 	protected bool $generalDiscountAddsUp = false; 	protected string $price = '0.00'; 	protected string $currentlyCalculatedPrice = '0.00';  	protected ?DiscountableItem $discountableItem = null; 	protected ?Totals $totals = null;  	public function __construct(int $quantity, DiscountableItem $discountableItem, Totals $totals, string $price){}  	public function addDiscount(DiscountReturnObject $discount): void{}  	public function getDiscountableItem(): ?DiscountableItem{}  	public function setTaxRate(int|float $taxRate): void{}  	abstract public function total(): void;  	public function getTotalPrice(): string{}  	public function getTotalDiscounts(): string{}  	public function getTotalPriceWithDiscounts(): string{}  	public function getQuantity(): int{}  	public function getTotalTax(): string{}  	public function getDiscounts(): array{}  	public function getTaxRate(): string{}  	public function getGeneralDiscountApplied(): bool{}  	public function getGeneralDiscountAddsUp(): bool{}  	public function getPrice(): string{}  	public function getCurrentlyCalculatedPrice(): string{}  	protected function totalDiscounts(): void{}  	protected function totalPrice(): void{}  	protected function totalPriceWithDiscounts(): void{}  	protected function totalTax(): void{} }