import constants from "../../common/constants.mjs";
import common from "../common/webhook.mjs";
import sampleEmit from "./test-event.mjs";
export default {
  ...common,
  key: "clicksend-new-incoming-sms-instant",
  name: "New Incoming SMS (Instant)",
  description: "Emit new event for each new incoming SMS message received. [See the documentation](https://developers.clicksend.com/docs/rest/v3/#view-inbound-sms)",
  version: "0.0.1",
  type: "source",
  dedupe: "unique",
  props: {
    ...common.props,
    dedicatedNumber: {
      propDefinition: [
        common.props.app,
        "dedicatedNumber",
      ],
    },
    messageSearchTerm: {
      type: "string",
      label: "Message Search Term",
      description: "Search for a specific message. Eg `hello world`",
    },
  },
  hooks: {
    async activate() {
      const {
        http: { endpoint: actionAddress },
        dedicatedNumber,
        messageSearchTerm,
        createSMSInboundAutomation,
        setWebhookId,
      } = this;
      const response =
        await createSMSInboundAutomation({
          data: {
            dedicated_number: dedicatedNumber,
            rule_name: "PD Inbound SMS",
            message_search_type: constants.MSG_SEARCH_TYPE.ANY_MSG,
            message_search_term: messageSearchTerm,
            action: constants.ACTION.URL,
            action_address: actionAddress,
            enabled: constants.ENABLED,
            webhook_type: constants.WEBHOOK_TYPE.JSON,
          },
        });
      setWebhookId(response.data.inbound_rule_id);
    },
    async deactivate() {
      const {
        getWebhookId,
        deleteSMSInboundAutomation,
      } = this;
      const inboundRuleId = getWebhookId();
      if (inboundRuleId) {
        await deleteSMSInboundAutomation({
          inboundRuleId,
        });
      }
    },
  },
  methods: {
    ...common.methods,
    createSMSInboundAutomation(args = {}) {
      return this.app.post({
        debug: true,
        path: "/automations/sms/inbound",
        ...args,
      });
    },
    deleteSMSInboundAutomation({
      inboundRuleId, ...args
    } = {}) {
      return this.app.delete({
        debug: true,
        path: `/automations/sms/inbound/${inboundRuleId}`,
        ...args,
      });
    },
    generateMeta(resource) {
      return {
        id: resource.message_id,
        summary: `New SMS: ${resource.message_id}`,
        ts: Date.parse(resource.timestamp),
      };
    },
  },
  sampleEmit,
};