import acymailing from "../../acymailing.app.mjs";
import { parseObject } from "../../common/utils.mjs";
export default {
  key: "acymailing-add-update-user",
  name: "Add or Update User",
  description: "Creates a new user or updates an existing user in AcyMailing. If the user exists, will update the user's data with provided information. [See the documentation](https://docs.acymailing.com/v/rest-api/users#create-or-update-a-user)",
  version: "0.0.2",
  annotations: {
    destructiveHint: true,
    openWorldHint: true,
    readOnlyHint: false,
  },
  type: "action",
  props: {
    acymailing,
    email: {
      type: "string",
      label: "Email",
      description: "The email address is used when updating an existing user.",
    },
    name: {
      type: "string",
      label: "Name",
      description: "Any character should be available.",
      optional: true,
    },
    active: {
      type: "boolean",
      label: "Active",
      description: "Defaults to true.",
      optional: true,
    },
    confirmed: {
      type: "boolean",
      label: "Confirmed",
      description: "The confirmation is related to the \"Require confirmation\" option in the configuration, tab \"Subscription\".",
      optional: true,
    },
    cmsId: {
      type: "integer",
      label: "CMS Id",
      description: "The cms_id must match the ID of the corresponding Joomla/WordPress user.",
      optional: true,
    },
    customFields: {
      type: "object",
      label: "Custom Fields",
      description: "An object of field Ids and values.",
      optional: true,
    },
    triggers: {
      type: "boolean",
      label: "Triggers",
      description: "Defaults to true. Defines if the saving of the user triggers automated tasks like follow-up campaigns and automations.",
      optional: true,
    },
    sendConf: {
      type: "boolean",
      label: "Send Conf",
      description: "Defaults to true. Defines if the confirmation email should be sent when a new user is created.",
      optional: true,
    },
  },
  async run({ $ }) {
    const response = await this.acymailing.createUserOrUpdate({
      $,
      data: {
        email: this.email,
        name: this.name,
        active: this.active,
        confirmed: this.confirmed,
        cmsId: this.cmsId,
        customFields: parseObject(this.customFields),
        triggers: this.triggers,
        sendConf: this.sendConf,
      },
    });
    $.export("$summary", `Successfully added or updated user with email with Id: ${response.userId}`);
    return response;
  },
};