import * as cloudwatch from "../../aws-cloudwatch";
import * as notifications from "../../aws-codestarnotifications";
import * as iam from "../../aws-iam";
import * as logs from "../../aws-logs";
import * as sns from "../../aws-sns";
import * as cdk from "../../core";
import { Construct } from 'constructs';
/**
 * (experimental) Properties for a new Slack channel configuration.
 *
 * @experimental
 */
export interface SlackChannelConfigurationProps {
    /**
     * (experimental) The name of Slack channel configuration.
     *
     * @experimental
     */
    readonly slackChannelConfigurationName: string;
    /**
     * (experimental) The permission role of Slack channel configuration.
     *
     * @default - A role will be created.
     * @experimental
     */
    readonly role?: iam.IRole;
    /**
     * (experimental) The ID of the Slack workspace authorized with AWS Chatbot.
     *
     * To get the workspace ID, you must perform the initial authorization flow with Slack in the AWS Chatbot console.
     * Then you can copy and paste the workspace ID from the console.
     * For more details, see steps 1-4 in Setting Up AWS Chatbot with Slack in the AWS Chatbot User Guide.
     *
     * @see https://docs.aws.amazon.com/chatbot/latest/adminguide/setting-up.html#Setup_intro
     * @experimental
     */
    readonly slackWorkspaceId: string;
    /**
     * (experimental) The ID of the Slack channel.
     *
     * To get the ID, open Slack, right click on the channel name in the left pane, then choose Copy Link.
     * The channel ID is the 9-character string at the end of the URL. For example, ABCBBLZZZ.
     *
     * @experimental
     */
    readonly slackChannelId: string;
    /**
     * (experimental) The SNS topics that deliver notifications to AWS Chatbot.
     *
     * @default None
     * @experimental
     */
    readonly notificationTopics?: sns.ITopic[];
    /**
     * (experimental) Specifies the logging level for this configuration.
     *
     * This property affects the log entries pushed to Amazon CloudWatch Logs.
     *
     * @default LoggingLevel.NONE
     * @experimental
     */
    readonly loggingLevel?: LoggingLevel;
    /**
     * (experimental) The number of days log events are kept in CloudWatch Logs.
     *
     * When updating
     * this property, unsetting it doesn't remove the log retention policy. To
     * remove the retention policy, set the value to `INFINITE`.
     *
     * @default logs.RetentionDays.INFINITE
     * @experimental
     */
    readonly logRetention?: logs.RetentionDays;
    /**
     * (experimental) The IAM role for the Lambda function associated with the custom resource that sets the retention policy.
     *
     * @default - A new role is created.
     * @experimental
     */
    readonly logRetentionRole?: iam.IRole;
    /**
     * (experimental) When log retention is specified, a custom resource attempts to create the CloudWatch log group.
     *
     * These options control the retry policy when interacting with CloudWatch APIs.
     *
     * @default - Default AWS SDK retry options.
     * @experimental
     */
    readonly logRetentionRetryOptions?: logs.LogRetentionRetryOptions;
}
/**
 * (experimental) Logging levels include ERROR, INFO, or NONE.
 *
 * @experimental
 */
export declare enum LoggingLevel {
    /**
     * (experimental) ERROR.
     *
     * @experimental
     */
    ERROR = "ERROR",
    /**
     * (experimental) INFO.
     *
     * @experimental
     */
    INFO = "INFO",
    /**
     * (experimental) NONE.
     *
     * @experimental
     */
    NONE = "NONE"
}
/**
 * (experimental) Represents a Slack channel configuration.
 *
 * @experimental
 */
export interface ISlackChannelConfiguration extends cdk.IResource, iam.IGrantable, notifications.INotificationRuleTarget {
    /**
     * (experimental) The ARN of the Slack channel configuration In the form of arn:aws:chatbot:{region}:{account}:chat-configuration/slack-channel/{slackChannelName}.
     *
     * @experimental
     * @attribute true
     */
    readonly slackChannelConfigurationArn: string;
    /**
     * (experimental) The name of Slack channel configuration.
     *
     * @experimental
     * @attribute true
     */
    readonly slackChannelConfigurationName: string;
    /**
     * (experimental) The permission role of Slack channel configuration.
     *
     * @default - A role will be created.
     * @experimental
     * @attribute true
     */
    readonly role?: iam.IRole;
    /**
     * (experimental) Adds a statement to the IAM role.
     *
     * @experimental
     */
    addToRolePolicy(statement: iam.PolicyStatement): void;
    /**
     * (experimental) Return the given named metric for this SlackChannelConfiguration.
     *
     * @experimental
     */
    metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
}
/**
 * Either a new or imported Slack channel configuration
 */
declare abstract class SlackChannelConfigurationBase extends cdk.Resource implements ISlackChannelConfiguration {
    abstract readonly slackChannelConfigurationArn: string;
    abstract readonly slackChannelConfigurationName: string;
    abstract readonly grantPrincipal: iam.IPrincipal;
    abstract readonly role?: iam.IRole;
    /**
     * (experimental) Adds extra permission to iam-role of Slack channel configuration.
     *
     * @experimental
     */
    addToRolePolicy(statement: iam.PolicyStatement): void;
    /**
     * (experimental) Return the given named metric for this SlackChannelConfiguration.
     *
     * @experimental
     */
    metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * (experimental) Returns a target configuration for notification rule.
     *
     * @experimental
     */
    bindAsNotificationRuleTarget(_scope: Construct): notifications.NotificationRuleTargetConfig;
}
/**
 * (experimental) A new Slack channel configuration.
 *
 * @experimental
 */
export declare class SlackChannelConfiguration extends SlackChannelConfigurationBase {
    /**
     * (experimental) Import an existing Slack channel configuration provided an ARN.
     *
     * @param scope The parent creating construct.
     * @param id The construct's name.
     * @param slackChannelConfigurationArn configuration ARN (i.e. arn:aws:chatbot::1234567890:chat-configuration/slack-channel/my-slack).
     * @returns a reference to the existing Slack channel configuration
     * @experimental
     */
    static fromSlackChannelConfigurationArn(scope: Construct, id: string, slackChannelConfigurationArn: string): ISlackChannelConfiguration;
    /**
     * (experimental) Return the given named metric for All SlackChannelConfigurations.
     *
     * @experimental
     */
    static metricAll(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * (experimental) The ARN of the Slack channel configuration In the form of arn:aws:chatbot:{region}:{account}:chat-configuration/slack-channel/{slackChannelName}.
     *
     * @experimental
     */
    readonly slackChannelConfigurationArn: string;
    /**
     * (experimental) The name of Slack channel configuration.
     *
     * @experimental
     */
    readonly slackChannelConfigurationName: string;
    /**
     * (experimental) The permission role of Slack channel configuration.
     *
     * @experimental
     */
    readonly role?: iam.IRole;
    /**
     * (experimental) The principal to grant permissions to.
     *
     * @experimental
     */
    readonly grantPrincipal: iam.IPrincipal;
    /**
     * The SNS topic that deliver notifications to AWS Chatbot.
     * @attribute
     */
    private readonly notificationTopics;
    /**
     * @experimental
     */
    constructor(scope: Construct, id: string, props: SlackChannelConfigurationProps);
    /**
     * (experimental) Adds a SNS topic that deliver notifications to AWS Chatbot.
     *
     * @experimental
     */
    addNotificationTopic(notificationTopic: sns.ITopic): void;
}
export {};
