searchIndex; } /** * Return the localized category label. */ public function categoryLabel(): string { $brand = AmazonDiscountBrand::fromStorageKey( $this->searchIndex ); if ( $brand !== null ) { return $brand; } return AmazonDiscountCategory::label( $this->searchIndex ); } /** * Return the upstream result position. */ public function position(): int { return $this->position; } /** * Return the ASIN. */ public function asin(): string { return $this->asin; } /** * Return the product title. */ public function title(): string { return $this->title; } /** * Return the optional brand. */ public function brand(): ?string { return $this->brand; } /** * Return the canonical detail URL. */ public function detailUrl(): string { return $this->detailUrl; } /** * Return the affiliate URL. */ public function affiliateUrl(): string { return $this->affiliateUrl; } /** * Return the optional primary image URL. */ public function imageUrl(): ?string { return $this->imageUrl; } /** * Return the optional decimal price amount. */ public function priceAmount(): ?string { return $this->priceAmount; } /** * Return the optional ISO currency code. */ public function priceCurrency(): ?string { return $this->priceCurrency; } /** * Return the optional formatted price. */ public function priceLabel(): ?string { return $this->priceLabel; } /** * Return the selected listing saving percentage. */ public function savingsPercentage(): ?int { return $this->savingsPercentage; } /** * Return the minimum saving threshold used for discovery. */ public function minSavingPercent(): int { return $this->minSavingPercent; } /** * Return the snapshot timestamp. */ public function fetchedAt(): DateTimeImmutable { return $this->fetchedAt; } }