<?php declare(strict_types=1);
/**
* gb media
* All Rights Reserved.
*
* Unauthorized copying of this file, via any medium is strictly prohibited.
* The content of this file is proprietary and confidential.
*
* @category Shopware
* @package Shopware_Plugins
* @subpackage GbmedEnev
* @copyright Copyright (c) 2019, gb media
* @license proprietary
* @author Giuseppe Bottino
* @link http://www.gb-media.biz
*/
namespace Gbmed\Enev\Service;
use Gbmed\Enev\Core\Content\Enev\EnevEntity;
use Gbmed\Enev\Framework\Eprel\EprelGroups;
use GuzzleHttp\Client;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Symfony\Component\HttpFoundation\Response;
class Eprel
{
public const EPREL_URL = "https://eprel.ec.europa.eu/api/products";
private EprelGroups $eprelGroups;
private Client $client;
/**
* @param EprelGroups $eprelGroups
*/
public function __construct(
EprelGroups $eprelGroups
) {
$this->eprelGroups = $eprelGroups;
}
/**
* get eprel data
*
* @param string $eprelGroup
* @param int $eprelId
* @return array|null
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function getEprelData(string $eprelGroup, int $eprelId): ?array
{
$productUrl = self::generateProductUrl($eprelGroup, $eprelId);
$response = $this->getClient()->get($productUrl);
if ($response->getStatusCode() !== Response::HTTP_OK) {
return null;
}
$body = $response->getBody();
$content = json_decode($body->getContents(), true);
return is_array($content) ? $content : null;
}
/**
* get eprel data from $element
*
* @param EnevEntity $element
* @return array|null
*/
public function getEprelDataFromElement(EnevEntity $element): ?array
{
return [
'energyClass' => $element->getClass(),
'color' => $element->getColor(),
'energyClassSDR' => $element->getSpectrumFrom(),
'energyClassHDR' => $element->getSpectrumTo(),
'eprelRegistrationNumber' => $element->getEprelId(),
'productGroup' => $element->getEprelGroup(),
'eprelMedia' => $element->getEprelMedia(),
'eprelDatasheed' => $element->getEprelDatasheed(),
];
}
/**
* @param array $eprelData
* @param SalesChannelContext|null $context
* @return array
*/
public function getGbmedEnev(array $eprelData, ?SalesChannelContext $salesChannelContext = null)
{
return $this->eprelGroups->getGroup($eprelData['productGroup'])
->handle($eprelData, $salesChannelContext);
}
/**
* @param string $eprelGroup
* @param int $eprelId
* @param string|null $type
* @return string
*/
public static function generateProductUrl(string $eprelGroup, int $eprelId, string $type = null)
{
$params = [$eprelGroup, $eprelId];
if ($type) {
$params[] = $type;
}
return self::EPREL_URL . '/' . implode('/', $params);
}
/**
* return guzzle http client
*
* @return Client
*/
public function getClient(): Client
{
if (!isset($this->client)) {
$this->client = new Client();
}
return $this->client;
}
}