<?php
// GENERATED CODE -- DO NOT EDIT!

// Original file comments:
//
// Сервис реализует функционал управления устройствами
namespace Keyapis\Device\V1;

/**
 * Сервис устройств
 */
class DeviceServiceClient extends \Grpc\BaseStub {

    /**
     * @param string $hostname hostname
     * @param array $opts channel options
     * @param \Grpc\Channel $channel (optional) re-use channel object
     */
    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * Метод получаения устройства.
     * Метод доступен для: admin, service, owner, employee, bti, ltp_first
     * @param \Keyapis\Device\V1\GetDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDevice(\Keyapis\Device\V1\GetDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/GetDevice',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка устройств.
     * Метод доступен для: admin, service, owner, employee, bti, ltp_first
     * @param \Keyapis\Device\V1\GetDeviceListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceList(\Keyapis\Device\V1\GetDeviceListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.device.v1.DeviceService/GetDeviceList',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества устройств.
     * Метод доступен для: admin, service, owner, employee, bti, ltp_first
     * @param \Keyapis\Device\V1\GetDeviceCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceCount(\Keyapis\Device\V1\GetDeviceCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/GetDeviceCount',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод создания устройства.
     * Метод доступен для: admin, bti, service, owner, employee.
     * Для owner, employee доступно создание и редактирование только в КВГ, привязанных к компании пользователя
     * @param \Keyapis\Device\V1\PostDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDevice(\Keyapis\Device\V1\PostDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PostDevice',
        $argument,
        ['\Keyapis\Device\V1\PostDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод изменения устройства.
     * Метод доступен для: admin, bti, service
     * @param \Keyapis\Device\V1\PutDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutDevice(\Keyapis\Device\V1\PutDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PutDevice',
        $argument,
        ['\Keyapis\Device\V1\PutDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод установки пресета на устройство.
     * Метод доступен для: admin, service
     * @param \Keyapis\Device\V1\PostDeviceInstallPresetRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceInstallPreset(\Keyapis\Device\V1\PostDeviceInstallPresetRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PostDeviceInstallPreset',
        $argument,
        ['\Keyapis\Device\V1\PostDeviceInstallPresetResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод замены устройста.
     * Логика работы метода: https://confluence.rt.ru/pages/viewpage.action?pageId=655256574.
     * Метод доступен для: admin, bti, service
     * @param \Keyapis\Device\V1\PostDeviceReplaceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceReplace(\Keyapis\Device\V1\PostDeviceReplaceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PostDeviceReplace',
        $argument,
        ['\Keyapis\Device\V1\PostDeviceReplaceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод переконфигурирования устройста.
     * Логика работы метода: https://confluence.rt.ru/pages/viewpage.action?pageId=630337555.
     * Метод доступен для: admin, bti, service
     * @param \Keyapis\Device\V1\PostDeviceReconfigureRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceReconfigure(\Keyapis\Device\V1\PostDeviceReconfigureRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PostDeviceReconfigure',
        $argument,
        ['\Keyapis\Device\V1\PostDeviceReconfigureResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения статусов конфигурации устройства.
     * Метод доступен для: admin, service, bti, ltp_first
     * @param \Keyapis\Device\V1\GetDeviceConfigurationStatusesRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceConfigurationStatuses(\Keyapis\Device\V1\GetDeviceConfigurationStatusesRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/GetDeviceConfigurationStatuses',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceConfigurationStatusesResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод изменения статуса конфигурации устройства.
     * Метод доступен для: admin, service
     * @param \Keyapis\Device\V1\PostDeviceConfigurationStatusRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceConfigurationStatus(\Keyapis\Device\V1\PostDeviceConfigurationStatusRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/PostDeviceConfigurationStatus',
        $argument,
        ['\Keyapis\Device\V1\PostDeviceConfigurationStatusResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка конфигураций сгруппированных по устройствам.
     * Метод доступен для: admin, service
     * @param \Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceConfigurationStatusGroupedList(\Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.device.v1.DeviceService/GetDeviceConfigurationStatusGroupedList',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества конфигураций сгруппированных по устройствам.
     * Метод доступен для: admin, service
     * @param \Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceConfigurationStatusGroupedCount(\Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/GetDeviceConfigurationStatusGroupedCount',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceConfigurationStatusGroupedCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления устройства.
     * Метод доступен для: admin, service
     * @param \Keyapis\Device\V1\DeleteDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteDevice(\Keyapis\Device\V1\DeleteDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/DeleteDevice',
        $argument,
        ['\Keyapis\Device\V1\DeleteDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получаения упрощенного устройства.
     * Метод доступен для: admin, service, owner, employee, bti, ltp_first.
     * Метод доступен для: ApiKey
     * @param \Keyapis\Device\V1\GetDeviceLiteRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceLite(\Keyapis\Device\V1\GetDeviceLiteRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.device.v1.DeviceService/GetDeviceLite',
        $argument,
        ['\Keyapis\Device\V1\GetDeviceLiteResponse', 'decode'],
        $metadata, $options);
    }

}
