/**
 * Copyright 2019 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { OAuth2Client, JWT, Compute, UserRefreshClient } from 'google-auth-library';
import { GoogleConfigurable, MethodOptions, GlobalOptions, BodyResponseCallback, APIRequestContext } from 'googleapis-common';
import { GaxiosPromise } from 'gaxios';
export declare namespace groupssettings_v1 {
    interface Options extends GlobalOptions {
        version: 'v1';
    }
    interface StandardParameters {
        /**
         * Data format for the response.
         */
        alt?: string;
        /**
         * Selector specifying which fields to include in a partial response.
         */
        fields?: string;
        /**
         * API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
         */
        key?: string;
        /**
         * OAuth 2.0 token for the current user.
         */
        oauth_token?: string;
        /**
         * Returns response with indentations and line breaks.
         */
        prettyPrint?: boolean;
        /**
         * An opaque string that represents a user for quota purposes. Must not exceed 40 characters.
         */
        quotaUser?: string;
        /**
         * Deprecated. Please use quotaUser instead.
         */
        userIp?: string;
    }
    /**
     * Groups Settings API
     *
     * Manages permission levels and related settings of a group.
     *
     * @example
     * const {google} = require('googleapis');
     * const groupssettings = google.groupssettings('v1');
     *
     * @namespace groupssettings
     * @type {Function}
     * @version v1
     * @variation v1
     * @param {object=} options Options for Groupssettings
     */
    class Groupssettings {
        context: APIRequestContext;
        groups: Resource$Groups;
        constructor(options: GlobalOptions, google?: GoogleConfigurable);
    }
    /**
     * JSON template for Group resource
     */
    interface Schema$Groups {
        /**
         * Are external members allowed to join the group.
         */
        allowExternalMembers?: string;
        /**
         * Is google allowed to contact admins.
         */
        allowGoogleCommunication?: string;
        /**
         * If posting from web is allowed.
         */
        allowWebPosting?: string;
        /**
         * If the group is archive only
         */
        archiveOnly?: string;
        /**
         * Custom footer text.
         */
        customFooterText?: string;
        /**
         * Default email to which reply to any message should go.
         */
        customReplyTo?: string;
        /**
         * If any of the settings that will be merged have custom roles which is anything other than owners, managers, or group scopes.
         */
        customRolesEnabledForSettingsToBeMerged?: string;
        /**
         * Default message deny notification message
         */
        defaultMessageDenyNotificationText?: string;
        /**
         * Description of the group
         */
        description?: string;
        /**
         * Email id of the group
         */
        email?: string;
        /**
         * If a primary Collab Inbox feature is enabled.
         */
        enableCollaborativeInbox?: string;
        /**
         * If favorite replies should be displayed above other replies.
         */
        favoriteRepliesOnTop?: string;
        /**
         * Whether to include custom footer.
         */
        includeCustomFooter?: string;
        /**
         * If this groups should be included in global address list or not.
         */
        includeInGlobalAddressList?: string;
        /**
         * If the contents of the group are archived.
         */
        isArchived?: string;
        /**
         * The type of the resource.
         */
        kind?: string;
        /**
         * Maximum message size allowed.
         */
        maxMessageBytes?: number;
        /**
         * Can members post using the group email address.
         */
        membersCanPostAsTheGroup?: string;
        /**
         * Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
         */
        messageDisplayFont?: string;
        /**
         * Moderation level for messages. Possible values are: MODERATE_ALL_MESSAGES MODERATE_NON_MEMBERS MODERATE_NEW_MEMBERS MODERATE_NONE
         */
        messageModerationLevel?: string;
        /**
         * Name of the Group
         */
        name?: string;
        /**
         * Primary language for the group.
         */
        primaryLanguage?: string;
        /**
         * Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
         */
        replyTo?: string;
        /**
         * Should the member be notified if his message is denied by owner.
         */
        sendMessageDenyNotification?: string;
        /**
         * Is the group listed in groups directory
         */
        showInGroupDirectory?: string;
        /**
         * Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
         */
        spamModerationLevel?: string;
        /**
         * Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_OWNERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
         */
        whoCanAdd?: string;
        /**
         * Permission to add references to a topic. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanAddReferences?: string;
        /**
         * Permission to approve members. Possible values are: ALL_OWNERS_CAN_APPROVE ALL_MANAGERS_CAN_APPROVE ALL_MEMBERS_CAN_APPROVE NONE_CAN_APPROVE
         */
        whoCanApproveMembers?: string;
        /**
         * Permission to approve pending messages in the moderation queue. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanApproveMessages?: string;
        /**
         * Permission to assign topics in a forum to another user. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanAssignTopics?: string;
        /**
         * Permission for content assistants. Possible values are: Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanAssistContent?: string;
        /**
         * Permission to ban users. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanBanUsers?: string;
        /**
         * Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
         */
        whoCanContactOwner?: string;
        /**
         * Permission to delete replies to topics. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanDeleteAnyPost?: string;
        /**
         * Permission to delete topics. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanDeleteTopics?: string;
        /**
         * Permission for who can discover the group. Possible values are: ALL_MEMBERS_CAN_DISCOVER ALL_IN_DOMAIN_CAN_DISCOVER ANYONE_CAN_DISCOVER
         */
        whoCanDiscoverGroup?: string;
        /**
         * Permission to enter free form tags for topics in a forum. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanEnterFreeFormTags?: string;
        /**
         * Permission to hide posts by reporting them as abuse. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanHideAbuse?: string;
        /**
         * Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE ALL_OWNERS_CAN_INVITE NONE_CAN_INVITE
         */
        whoCanInvite?: string;
        /**
         * Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
         */
        whoCanJoin?: string;
        /**
         * Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_OWNERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
         */
        whoCanLeaveGroup?: string;
        /**
         * Permission to lock topics. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanLockTopics?: string;
        /**
         * Permission to make topics appear at the top of the topic list. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMakeTopicsSticky?: string;
        /**
         * Permission to mark a topic as a duplicate of another topic. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMarkDuplicate?: string;
        /**
         * Permission to mark any other user&#39;s post as a favorite reply. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMarkFavoriteReplyOnAnyTopic?: string;
        /**
         * Permission to mark a post for a topic they started as a favorite reply. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMarkFavoriteReplyOnOwnTopic?: string;
        /**
         * Permission to mark a topic as not needing a response. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMarkNoResponseNeeded?: string;
        /**
         * Permission for content moderation. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanModerateContent?: string;
        /**
         * Permission for membership moderation. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanModerateMembers?: string;
        /**
         * Permission to modify members (change member roles). Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanModifyMembers?: string;
        /**
         * Permission to change tags and categories. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanModifyTagsAndCategories?: string;
        /**
         * Permission to move topics into the group or forum. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMoveTopicsIn?: string;
        /**
         * Permission to move topics out of the group or forum. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanMoveTopicsOut?: string;
        /**
         * Permission to post announcements, a special topic type. Possible values are: NONE OWNERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanPostAnnouncements?: string;
        /**
         * Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_OWNERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
         */
        whoCanPostMessage?: string;
        /**
         * Permission to take topics in a forum. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanTakeTopics?: string;
        /**
         * Permission to unassign any topic in a forum. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanUnassignTopic?: string;
        /**
         * Permission to unmark any post from a favorite reply. Possible values are: NONE OWNERS_ONLY MANAGERS_ONLY OWNERS_AND_MANAGERS ALL_MEMBERS
         */
        whoCanUnmarkFavoriteReplyOnAnyTopic?: string;
        /**
         * Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW ALL_OWNERS_CAN_VIEW
         */
        whoCanViewGroup?: string;
        /**
         * Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW ALL_OWNERS_CAN_VIEW
         */
        whoCanViewMembership?: string;
    }
    class Resource$Groups {
        context: APIRequestContext;
        constructor(context: APIRequestContext);
        /**
         * groupsSettings.groups.get
         * @desc Gets one resource by id.
         * @alias groupsSettings.groups.get
         * @memberOf! ()
         *
         * @param {object} params Parameters for request
         * @param {string} params.groupUniqueId The resource ID
         * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
         * @param {callback} callback The callback that handles the response.
         * @return {object} Request object
         */
        get(params?: Params$Resource$Groups$Get, options?: MethodOptions): GaxiosPromise<Schema$Groups>;
        get(params: Params$Resource$Groups$Get, options: MethodOptions | BodyResponseCallback<Schema$Groups>, callback: BodyResponseCallback<Schema$Groups>): void;
        get(params: Params$Resource$Groups$Get, callback: BodyResponseCallback<Schema$Groups>): void;
        get(callback: BodyResponseCallback<Schema$Groups>): void;
        /**
         * groupsSettings.groups.patch
         * @desc Updates an existing resource. This method supports patch semantics.
         * @alias groupsSettings.groups.patch
         * @memberOf! ()
         *
         * @param {object} params Parameters for request
         * @param {string} params.groupUniqueId The resource ID
         * @param {().Groups} params.resource Request body data
         * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
         * @param {callback} callback The callback that handles the response.
         * @return {object} Request object
         */
        patch(params?: Params$Resource$Groups$Patch, options?: MethodOptions): GaxiosPromise<Schema$Groups>;
        patch(params: Params$Resource$Groups$Patch, options: MethodOptions | BodyResponseCallback<Schema$Groups>, callback: BodyResponseCallback<Schema$Groups>): void;
        patch(params: Params$Resource$Groups$Patch, callback: BodyResponseCallback<Schema$Groups>): void;
        patch(callback: BodyResponseCallback<Schema$Groups>): void;
        /**
         * groupsSettings.groups.update
         * @desc Updates an existing resource.
         * @alias groupsSettings.groups.update
         * @memberOf! ()
         *
         * @param {object} params Parameters for request
         * @param {string} params.groupUniqueId The resource ID
         * @param {().Groups} params.resource Request body data
         * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
         * @param {callback} callback The callback that handles the response.
         * @return {object} Request object
         */
        update(params?: Params$Resource$Groups$Update, options?: MethodOptions): GaxiosPromise<Schema$Groups>;
        update(params: Params$Resource$Groups$Update, options: MethodOptions | BodyResponseCallback<Schema$Groups>, callback: BodyResponseCallback<Schema$Groups>): void;
        update(params: Params$Resource$Groups$Update, callback: BodyResponseCallback<Schema$Groups>): void;
        update(callback: BodyResponseCallback<Schema$Groups>): void;
    }
    interface Params$Resource$Groups$Get extends StandardParameters {
        /**
         * Auth client or API Key for the request
         */
        auth?: string | OAuth2Client | JWT | Compute | UserRefreshClient;
        /**
         * The resource ID
         */
        groupUniqueId?: string;
    }
    interface Params$Resource$Groups$Patch extends StandardParameters {
        /**
         * Auth client or API Key for the request
         */
        auth?: string | OAuth2Client | JWT | Compute | UserRefreshClient;
        /**
         * The resource ID
         */
        groupUniqueId?: string;
        /**
         * Request body metadata
         */
        requestBody?: Schema$Groups;
    }
    interface Params$Resource$Groups$Update extends StandardParameters {
        /**
         * Auth client or API Key for the request
         */
        auth?: string | OAuth2Client | JWT | Compute | UserRefreshClient;
        /**
         * The resource ID
         */
        groupUniqueId?: string;
        /**
         * Request body metadata
         */
        requestBody?: Schema$Groups;
    }
}
