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

// Original file comments:
//
// Сервис реализует функционал управления квартирограммами.
// В настоящий момент Квартирограмма является корневым агрегатом для домов, принадлежит управляющей компании.
// На транспортном уровне определяет связи между устройствами и квартирами
namespace Keyapis\AccessControl\V1;

/**
 * Сервис управления квартирограммами
 */
class FlatgrammServiceClient 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);
    }

    /**
     * Метод получения облегченной квартирограммы.
     * Для пользователей типов owner, employee возвращаются только квартирограммы привязанные к компании пользователя.
     * Для пользователей типов owner, employee: в результат попадают только квартирограммы, привязанные к компании пользователя по любому из типов связи FlatgrammCompanyRelation.Type.
     * Метод доступен для: admin, manager, service, bti, ltp_first, owner, employee
     * @param \Keyapis\AccessControl\V1\GetFlatgrammRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetFlatgramm(\Keyapis\AccessControl\V1\GetFlatgrammRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgramm',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка облегченных квартирограмм.
     * Для пользователей типов owner, employee: в результат фильтрации попадают только квартирограммы компании пользователя.
     * Для пользователей типов owner, employee: если filter.company_ids непустое и не совпадает с COMPANY_ID пользователя, метод вернет PERMISSION_DENIED = 7 (403 Forbidden).
     * Для пользователей типов owner, employee: если filter.company_ids пустое, то фильтрация по COMPANY_ID пользователя.
     * Метод доступен для: admin, manager, service, bti, ltp_first, owner, employee
     * @param \Keyapis\AccessControl\V1\GetFlatgrammListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetFlatgrammList(\Keyapis\AccessControl\V1\GetFlatgrammListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgrammList',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества квартирограмм.
     * Для пользователей типов owner, employee: в результат фильтрации попадают только квартирограммы компании пользователя.
     * Для пользователей типов owner, employee: если filter.company_ids непустое и не совпадает с COMPANY_ID пользователя, метод вернет PERMISSION_DENIED = 7 (403 Forbidden).
     * Для пользователей типов owner, employee: если filter.company_ids пустое, то фильтрация по COMPANY_ID пользователя.
     * Метод доступен для: admin, manager, service, bti, ltp_first, owner, employee
     * @param \Keyapis\AccessControl\V1\GetFlatgrammCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetFlatgrammCount(\Keyapis\AccessControl\V1\GetFlatgrammCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCount',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей квартирограмм и домофонной компании.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\GetFlatgrammDcCompanyListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetFlatgrammDcCompanyList(\Keyapis\AccessControl\V1\GetFlatgrammDcCompanyListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgrammDcCompanyList',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammDcCompanyListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей квартирограмм и компаний.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetFlatgrammCompanyRelationList(\Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationList',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationListResponse', 'decode'],
        $metadata, $options);
    }

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

    /**
     * Метод получения количества связей квартирограмм и компаний.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetFlatgrammCompanyRelationCount(\Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationCount',
        $argument,
        ['\Keyapis\AccessControl\V1\GetFlatgrammCompanyRelationCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связей квартирограмм и домофонной компании.
     * Поддерживает только создание.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\PutFlatgrammDcCompanyAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutFlatgrammDcCompanyAttach(\Keyapis\AccessControl\V1\PutFlatgrammDcCompanyAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/PutFlatgrammDcCompanyAttach',
        $argument,
        ['\Keyapis\AccessControl\V1\PutFlatgrammDcCompanyAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связей квартирограммы и компании.
     * Поддерживает только создание.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutFlatgrammCompanyRelationAttach(\Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationAttach',
        $argument,
        ['\Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationAttachResponse', 'decode'],
        $metadata, $options);
    }

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

    /**
     * Метод удаления связей квартирограммы и компании.
     * Метод доступен для: admin, service, seller
     * @param \Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutFlatgrammCompanyRelationDetach(\Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationDetach',
        $argument,
        ['\Keyapis\AccessControl\V1\PutFlatgrammCompanyRelationDetachResponse', 'decode'],
        $metadata, $options);
    }

}
