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

// Original file comments:
//
// Сервис подъездов
namespace Keyapis\AccessControl\V1;

/**
 * Сервис подъездов
 */
class EntranceServiceClient 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);
    }

    /**
     * Метод создания подъезда.
     * Для ролей employee, owner можно сохранять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\PostEntranceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostEntrance(\Keyapis\AccessControl\V1\PostEntranceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.EntranceService/PostEntrance',
        $argument,
        ['\Keyapis\AccessControl\V1\PostEntranceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления подъезда.
     * Реализуется как удаление квартир по указанному дому и номеру подъезда.
     * Для ролей employee, owner можно удалять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\DeleteEntranceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteEntrance(\Keyapis\AccessControl\V1\DeleteEntranceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.EntranceService/DeleteEntrance',
        $argument,
        ['\Keyapis\AccessControl\V1\DeleteEntranceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка подъездов.
     * При переданном company_ids учитывается тип связи компании и квартирограммы.
     * Если EntranceFilter.CompanyRelationType = DEVICE_SERVICE, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
     * Если EntranceFilter.CompanyRelationType = MANAGEMENT, то проверяется связка в flatgramm_companies.
     * Если EntranceFilter.CompanyRelationType = DEFAULT, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
     * Если EntranceFilter.CompanyRelationType = COMPANY_RELATION_TYPE_UNKNOWN, вернется ошибка валидации.
     * При не переданном company_ids поле EntranceFilter.CompanyRelationType вызовет ошибку валидации.
     * Для ролей employee, owner можно получать только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\GetEntranceListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetEntranceList(\Keyapis\AccessControl\V1\GetEntranceListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_control.v1.EntranceService/GetEntranceList',
        $argument,
        ['\Keyapis\AccessControl\V1\GetEntranceListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод создания связи подъезда и устройства.
     * Для ролей employee, owner можно сохранять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * EntranceDevice.RelationType в данном методе не используется.
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\PutEntranceDeviceAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutEntranceDeviceAttach(\Keyapis\AccessControl\V1\PutEntranceDeviceAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.EntranceService/PutEntranceDeviceAttach',
        $argument,
        ['\Keyapis\AccessControl\V1\PutEntranceDeviceAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления связи подъезда и устройства.
     * Для ролей employee, owner можно удалять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * EntranceDevice.RelationType в данном методе не используется.
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\PutEntranceDeviceDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutEntranceDeviceDetach(\Keyapis\AccessControl\V1\PutEntranceDeviceDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.EntranceService/PutEntranceDeviceDetach',
        $argument,
        ['\Keyapis\AccessControl\V1\PutEntranceDeviceDetachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связок подъезд-устройство.
     * Для ролей employee, owner можно получать только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
     * Метод доступен для: admin, service, owner, employee
     * @param \Keyapis\AccessControl\V1\GetEntranceDeviceListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetEntranceDeviceList(\Keyapis\AccessControl\V1\GetEntranceDeviceListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_control.v1.EntranceService/GetEntranceDeviceList',
        $argument,
        ['\Keyapis\AccessControl\V1\GetEntranceDeviceListResponse', 'decode'],
        $metadata, $options);
    }

}
