registry = $registry; $this->analyzer = $analyzer; $this->configuration = $configuration ?? new CapabilityConfiguration(); } public function resolve(CapabilityContext $context): CapabilityResult { $identifierType = $this->resolveIdentifierType($context); $productType = $context->getProductType(); foreach ($this->registry->getByPriority() as $capability) { if (! $this->isCapabilityEnabled($capability)) { continue; } if (! $capability->supportsIdentifier($identifierType)) { continue; } if (! $capability->supportsProductType($productType)) { continue; } return new CapabilityResult( $identifierType, $capability->getName(), $capability->getProviders(), $this->configuration->resolveSearchStrategy($identifierType, $capability->getName()), 'resolved', 0.9, ['Capability resolved via architecture layer only.'] ); } return new CapabilityResult( $identifierType, 'unresolved', [], $this->configuration->resolveSearchStrategy($identifierType, 'default'), 'unresolved', 0.0, ['No capability matched for identifier/product type.'] ); } private function resolveIdentifierType(CapabilityContext $context): string { $providedType = strtoupper(trim($context->getIdentifierType())); if ($providedType !== '' && $providedType !== IdentifierAnalyzer::UNKNOWN) { return $providedType; } return $this->analyzer->classify($context->getIdentifier()); } private function isCapabilityEnabled(CapabilityInterface $capability): bool { return strtolower($capability->getStatus()) !== 'disabled'; } }