supportedDomains = array_values(array_unique($supportedDomains)); $this->supportedIdentifierTypes = array_values(array_unique($supportedIdentifierTypes)); $this->qualityScores = []; foreach (['metadata', 'seo', 'image', 'description', 'attributes', 'category', 'brand'] as $metric) { $this->qualityScores[$metric] = $this->ratio((float) ($qualityScores[$metric] ?? 0.0)); } $this->priceSupport = $priceSupport; } public function getSupportedDomains(): array { return $this->supportedDomains; } public function getSupportedIdentifierTypes(): array { return $this->supportedIdentifierTypes; } public function getQualityScores(): array { return $this->qualityScores; } public function getMetadataQuality(): float { return $this->qualityScores['metadata']; } public function getSeoQuality(): float { return $this->qualityScores['seo']; } public function getImageQuality(): float { return $this->qualityScores['image']; } public function getDescriptionQuality(): float { return $this->qualityScores['description']; } public function getAttributesQuality(): float { return $this->qualityScores['attributes']; } public function getCategoryQuality(): float { return $this->qualityScores['category']; } public function getBrandQuality(): float { return $this->qualityScores['brand']; } public function hasPriceSupport(): bool { return $this->priceSupport; } public function supportsDomain(string $domain): bool { return $this->contains($this->supportedDomains, $domain); } public function supportsIdentifierType(string $identifierType): bool { return $this->contains($this->supportedIdentifierTypes, $identifierType); } public function providesImages(float $minimumQuality = 0.01): bool { return $this->getImageQuality() >= $minimumQuality; } public function providesSeoRichDescriptions(float $minimumSeo = 0.7, float $minimumDescription = 0.7): bool { return $this->getSeoQuality() >= $minimumSeo && $this->getDescriptionQuality() >= $minimumDescription; } private function contains(array $values, string $needle): bool { foreach ($values as $value) { if (strcasecmp((string) $value, trim($needle)) === 0) { return true; } } return false; } private function ratio(float $value): float { return max(0.0, min(1.0, $value)); } }