import { StringMap } from '@naturalcycles/js-lib';
import { DebugLogLevel } from '..';
export interface SlackMessage {
    /**
     * @default bot
     */
    username?: string;
    channel?: string;
    icon_url?: string;
    /**
     * @default :spider_web:
     */
    icon_emoji?: string;
    /**
     * You can throw anything at it, it'll handle it appropriately:
     * String - as is
     * Object - pass via util.inspect()
     * Error - print the stack nicely
     */
    text: any;
    level?: DebugLogLevel;
    attachments?: SlackMessageAttachment[];
    /**
     * Keys-values will be rendered as MessageAttachment with Fields
     */
    kv?: StringMap<any>;
    /**
     * If specified - adds @name1, @name2 in the end of the message
     */
    mentions?: string[];
    /**
     * @default false
     * By default it ignores possible errors from slack
     */
    throwOnError?: boolean;
    /**
     * @default false
     * Skips logging message
     */
    noLog?: boolean;
}
export interface SlackAttachmentField {
    title: string;
    value: string;
    short?: boolean;
}
export interface SlackMessageAttachment {
    fallback?: string;
    color?: 'good' | 'warning' | 'danger' | string;
    pretext?: string;
    author_name?: string;
    author_link?: string;
    author_icon?: string;
    title?: string;
    title_link?: string;
    text?: string;
    fields?: SlackAttachmentField[];
    image_url?: string;
    thumb_url?: string;
    footer?: string;
    footer_icon?: string;
    ts?: number;
    callback_id?: string;
    mrkdwn_in?: ('pretext' | 'text' | 'fields')[];
}
export interface SlackSharedServiceCfg {
    /**
     * Undefined means slack is disabled.
     */
    webhookUrl?: string;
    defaults?: Partial<SlackMessage>;
    /**
     * Override channel when msg.level is set.
     * key: DebugLogLevel
     * value: channel name to send message to
     */
    channelByLevel?: StringMap;
}
