import crypto from "crypto";
import googleAds from "../../google_ads.app.mjs";
import common from "../common/common.mjs";
export default {
  ...common,
  key: "google_ads-add-contact-to-list-by-email",
  name: "Add Contact to Customer List by Email",
  description: "Adds a contact to a specific customer list in Google Ads. Lists typically update in 6 to 12 hours after operation. [See the documentation](https://developers.google.com/google-ads/api/docs/remarketing/audience-segments/customer-match/get-started)",
  version: "0.1.5",
  annotations: {
    destructiveHint: true,
    openWorldHint: true,
    readOnlyHint: false,
  },
  type: "action",
  props: {
    ...common.props,
    contactEmail: {
      propDefinition: [
        googleAds,
        "contactEmail",
      ],
    },
    userListId: {
      propDefinition: [
        googleAds,
        "userListId",
        ({
          accountId, customerClientId,
        }) => ({
          accountId,
          customerClientId,
        }),
      ],
    },
  },
  async run({ $ }) {
    const {
      googleAds, accountId, customerClientId, contactEmail, userListId,
    } = this;
    const offlineUserDataJob = await googleAds.createOfflineUserDataJob({
      $,
      accountId,
      customerClientId,
      data: {
        job: {
          customerMatchUserListMetadata: {
            userList: `customers/${customerClientId ?? accountId}/userLists/${userListId}`,
          },
          type: "CUSTOMER_MATCH_USER_LIST",
        },
      },
    });
    await googleAds.addContactToCustomerList({
      $,
      accountId,
      customerClientId,
      path: offlineUserDataJob.resourceName,
      data: {
        operations: [
          {
            create: {
              userIdentifiers: [
                {
                  hashedEmail: crypto.createHash("sha256").update(contactEmail)
                    .digest("hex"),
                },
              ],
            },
          },
        ],
      },
    });
    const response = await googleAds.runOfflineUserDataJob({
      $,
      accountId,
      customerClientId,
      path: offlineUserDataJob.resourceName,
    });
    $.export("$summary", `Added contact ${contactEmail} to user list ${userListId}`);
    return response;
  },
};