import app from "../../google_analytics.app.mjs";
export default {
  key: "google_analytics-create-key-event",
  name: "Create Key Event",
  description: "Creates a new key event. [See the documentation](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties.keyEvents/create)",
  version: "0.0.3",
  annotations: {
    destructiveHint: false,
    openWorldHint: true,
    readOnlyHint: false,
  },
  type: "action",
  props: {
    app,
    parent: {
      propDefinition: [
        app,
        "property",
      ],
      description: "The resource name of the parent property where this Key Event will be created. Format: `properties/123`",
    },
    eventName: {
      type: "string",
      label: "Event Name",
      description: "Immutable. The event name for this key event. Examples: `click`, `purchase`",
    },
    countingMethod: {
      type: "string",
      label: "Counting Method",
      description: "The method by which Key Events will be counted across multiple events within a session.",
      options: [
        {
          label: "Counting method not specified.",
          value: "COUNTING_METHOD_UNSPECIFIED",
        },
        {
          label: "Each Event instance is considered a Key Event.",
          value: "ONCE_PER_EVENT",
        },
        {
          label: "An Event instance is considered a Key Event at most once per session per user.",
          value: "ONCE_PER_SESSION",
        },
      ],
    },
  },
  methods: {
    createKeyEvent({
      parent, ...args
    } = {}) {
      return this.app.post({
        path: `/${parent}/keyEvents`,
        ...args,
      });
    },
  },
  async run({ $ }) {
    const {
      createKeyEvent,
      parent,
      eventName,
      countingMethod,
    } = this;
    const response = await createKeyEvent({
      $,
      parent,
      data: {
        eventName,
        countingMethod,
      },
    });
    $.export("$summary", `Successfully created key event with name ${eventName} and counting method ${countingMethod} in parent ${parent}`);
    return response;
  },
};