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

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

/**
 * Сервис управления объектами строительства телеметрии.
 * Авторизация:
 *   - Authorization: Bearer token.
 *   - X-Api-Key: apiKey
 */
class BuildingServiceClient 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);
    }

    /**
     * Метод получения объекта строительства.
     * Разрешения: telemetry_control:building:card, telemetry_control:building:card:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetBuildingRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetBuilding(\Keyapis\TelemetryControl\V1\GetBuildingRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/GetBuilding',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetBuildingResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка объектов строительства.
     * Разрешения: telemetry_control:building:list, telemetry_control:building:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetBuildingListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetBuildingList(\Keyapis\TelemetryControl\V1\GetBuildingListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.BuildingService/GetBuildingList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetBuildingListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества объектов строительства.
     * Разрешения: telemetry_control:building:list, telemetry_control:building:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetBuildingCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetBuildingCount(\Keyapis\TelemetryControl\V1\GetBuildingCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/GetBuildingCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetBuildingCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения объекта строительства.
     * Поддерживает создание и обновление.
     * Разрешения: telemetry_control:building:save, telemetry_control:building:save:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\PostBuildingRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostBuilding(\Keyapis\TelemetryControl\V1\PostBuildingRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/PostBuilding',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PostBuildingResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Полнодуплексный метод отправки статусов на сервер и получения изменения со стороны сервера.
     * Разрешения: telemetry_control:building:list, telemetry_control:building:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
     * Метод доступен для: ApiKey: Без учета разрешений
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\BidiStreamingCall
     */
    public function PostBuildingFullDuplex($metadata = [], $options = []) {
        return $this->_bidiRequest('/keyapis.telemetry_control.v1.BuildingService/PostBuildingFullDuplex',
        ['\Keyapis\TelemetryControl\V1\PostBuildingFullDuplexResponse','decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления объекта строительства.
     * Разрешения: telemetry_control:building:remove, telemetry_control:building:remove:own.
     * Метод доступен для: admin, service, bti, seller, application, owner, employee. При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\DeleteBuildingRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteBuilding(\Keyapis\TelemetryControl\V1\DeleteBuildingRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/DeleteBuilding',
        $argument,
        ['\Keyapis\TelemetryControl\V1\DeleteBuildingResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей объектов строительства и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\GetBuildingGroupListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetBuildingGroupList(\Keyapis\TelemetryControl\V1\GetBuildingGroupListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.BuildingService/GetBuildingGroupList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetBuildingGroupListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества связей объектов строительства и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\GetBuildingGroupCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetBuildingGroupCount(\Keyapis\TelemetryControl\V1\GetBuildingGroupCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/GetBuildingGroupCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetBuildingGroupCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связей объектов строительства и группы пользователя.
     * Поддерживает только создание.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutBuildingGroupAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutBuildingGroupAttach(\Keyapis\TelemetryControl\V1\PutBuildingGroupAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/PutBuildingGroupAttach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutBuildingGroupAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления связей объектов строительства и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutBuildingGroupDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutBuildingGroupDetach(\Keyapis\TelemetryControl\V1\PutBuildingGroupDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.BuildingService/PutBuildingGroupDetach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutBuildingGroupDetachResponse', 'decode'],
        $metadata, $options);
    }

}
