namespace Magento\Customer\Api;

/**
 * Remote class for @see \Magento\Customer\Api\CustomerRepositoryInterface
 */
class CustomerRepositoryInterfaceRemote implements CustomerRepositoryInterface
{
    /**
     * Publisher
     *
     * @var \Magento\Framework\MessageQueue\PublisherInterface
     */
    protected $publisher = null;

    /**
     * Initialize dependencies.
     *
     * @param \Magento\Framework\MessageQueue\PublisherInterface $publisher
     */
    public function __construct(\Magento\Framework\MessageQueue\PublisherInterface $publisher)
    {
        $this->publisher = $publisher;
    }

    /**
     * @inheritdoc
     */
    public function save(\Magento\Customer\Api\Data\CustomerInterface $customer, $passwordHash = null)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.save',
            ['customer' => $customer, 'passwordHash' => $passwordHash]
        );
    }

    /**
     * @inheritdoc
     */
    public function get($email, $websiteId = null)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.get',
            ['email' => $email, 'websiteId' => $websiteId]
        );
    }

    /**
     * @inheritdoc
     */
    public function getById($customerId)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.getById',
            ['customerId' => $customerId]
        );
    }

    /**
     * @inheritdoc
     */
    public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.getList',
            ['searchCriteria' => $searchCriteria]
        );
    }

    /**
     * @inheritdoc
     */
    public function delete(\Magento\Customer\Api\Data\CustomerInterface $customer)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.delete',
            ['customer' => $customer]
        );
    }

    /**
     * @inheritdoc
     */
    public function deleteById($customerId)
    {
        return $this->publisher->publish(
            'magento.customer.api.customerRepositoryInterface.deleteById',
            ['customerId' => $customerId]
        );
    }
}