import mattermost from "../../app/mattermost.app.mjs";
import { defineSource, } from "@pipedream/types";
export default defineSource({
    name: "New Message Sent in Channel (Instant)",
    description: "Emit new event when a message matching the requirements is sent in a channel. [See the documentation](https://api.mattermost.com/#tag/webhooks/operation/CreateOutgoingWebhook)",
    key: "mattermost-new-message-sent-in-channel",
    version: "0.0.2",
    type: "source",
    dedupe: "unique",
    props: {
        mattermost,
        db: "$.service.db",
        http: "$.interface.http",
        teamId: {
            propDefinition: [
                mattermost,
                "teamId",
            ],
        },
        channelId: {
            propDefinition: [
                mattermost,
                "publicChannelId",
                ({ teamId }) => ({
                    teamId,
                }),
            ],
        },
        displayName: {
            type: "string",
            label: "Display Name",
            description: "The display name of the webhook in Mattermost",
            optional: true,
            default: "Pipedream source",
        },
        triggerWords: {
            type: "string[]",
            label: "Trigger Words",
            description: "List of words that will trigger an event",
        },
        triggerWhen: {
            type: "integer",
            label: "Trigger When",
            description: "When to trigger an event",
            optional: true,
            options: [
                {
                    label: "When a trigger word is present in the message",
                    value: 0,
                },
                {
                    label: "If the message starts with a trigger word",
                    value: 1,
                },
            ],
        },
    },
    methods: {
        _getWebhookId() {
            return this.db.get("webhookId");
        },
        _setWebhookId(value) {
            this.db.set("webhookId", value);
        },
    },
    hooks: {
        async activate() {
            const data = {
                team_id: this.teamId,
                channel_id: this.channelId,
                display_name: this.displayName,
                description: `Pipedream - New Message Sent in Channel ${this.channelId}`,
                trigger_words: this.triggerWords,
                trigger_when: this.triggerWhen,
                callback_urls: [
                    this.http.endpoint,
                ],
                content_type: "application/json",
            };
            const { id } = await this.mattermost.createWebhook(data);
            this._setWebhookId(id);
        },
        async deactivate() {
            const id = this._getWebhookId();
            await this.mattermost.deleteWebhook(id);
        },
    },
    async run({ body }) {
        if (body) {
            const ts = Date.now();
            this.$emit(body, {
                id: typeof body.id === "string"
                    ? body.id
                    : ts,
                summary: "New message",
                ts,
            });
        }
    },
});