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

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

/**
 * Сервис управления шаблонами пользовательских групп
 */
class GroupTemplateServiceClient 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, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupTemplateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupTemplate(\Keyapis\AccessManagement\V1\GetGroupTemplateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplate',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupTemplateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка шаблонов групп.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupTemplateListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetGroupTemplateList(\Keyapis\AccessManagement\V1\GetGroupTemplateListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateList',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupTemplateListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества шаблонов групп.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupTemplateCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupTemplateCount(\Keyapis\AccessManagement\V1\GetGroupTemplateCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateCount',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupTemplateCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения шаблона группы.
     * Поддерживает создание и обновление как UPSERT по GroupTemplate.id.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\PostGroupTemplateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostGroupTemplate(\Keyapis\AccessManagement\V1\PostGroupTemplateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/PostGroupTemplate',
        $argument,
        ['\Keyapis\AccessManagement\V1\PostGroupTemplateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления шаблона группы.
     * Проставляет дату удаления GroupTemplate.deleted_at.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\DeleteGroupTemplateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteGroupTemplate(\Keyapis\AccessManagement\V1\DeleteGroupTemplateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/DeleteGroupTemplate',
        $argument,
        ['\Keyapis\AccessManagement\V1\DeleteGroupTemplateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей шаблонов групп и группы пользователя.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\GetGroupTemplateGroupListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetGroupTemplateGroupList(\Keyapis\AccessManagement\V1\GetGroupTemplateGroupListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateGroupList',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupTemplateGroupListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества связей шаблонов групп и группы пользователя.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\GetGroupTemplateGroupCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupTemplateGroupCount(\Keyapis\AccessManagement\V1\GetGroupTemplateGroupCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateGroupCount',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupTemplateGroupCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связей шаблонов групп и группы пользователя.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\PutGroupTemplateGroupAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupTemplateGroupAttach(\Keyapis\AccessManagement\V1\PutGroupTemplateGroupAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/PutGroupTemplateGroupAttach',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupTemplateGroupAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления связей шаблонов групп и группы пользователя.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\PutGroupTemplateGroupDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupTemplateGroupDetach(\Keyapis\AccessManagement\V1\PutGroupTemplateGroupDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupTemplateService/PutGroupTemplateGroupDetach',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupTemplateGroupDetachResponse', 'decode'],
        $metadata, $options);
    }

}
