import zerotier from "../../zerotier.app.mjs";
export default {
  key: "zerotier-update-network-member",
  type: "action",
  version: "0.0.3",
  annotations: {
    destructiveHint: true,
    openWorldHint: true,
    readOnlyHint: false,
  },
  name: "Update Network Member",
  description:
    "Update a specific member (node) within a network. Can authorize, rename, hide a member (as well as other updates). [See docs here](https://docs.zerotier.com/central/v1/#operation/updateNetworkMember)",
  props: {
    zerotier,
    networkId: {
      propDefinition: [
        zerotier,
        "networkId",
      ],
    },
    nodeId: {
      propDefinition: [
        zerotier,
        "nodeId",
        (c) => ({
          networkId: c.networkId,
        }),
      ],
    },
    memberHidden: {
      propDefinition: [
        zerotier,
        "memberHidden",
      ],
    },
    memberName: {
      propDefinition: [
        zerotier,
        "memberName",
      ],
    },
    memberDescription: {
      propDefinition: [
        zerotier,
        "memberDescription",
      ],
    },
    memberAuthorized: {
      propDefinition: [
        zerotier,
        "memberAuthorized",
      ],
    },
    memberActiveBridge: {
      propDefinition: [
        zerotier,
        "memberActiveBridge",
      ],
    },
    memberNoAutoAssignIps: {
      propDefinition: [
        zerotier,
        "memberNoAutoAssignIps",
      ],
    },
  },
  async run({ $ }) {
    const {
      memberHidden = null,
      memberName = null,
      memberDescription = null,
      memberAuthorized = null,
      memberActiveBridge = null,
      memberNoAutoAssignIps = null,
    } = this;
    const data = {
      hidden: memberHidden,
      name: memberName,
      description: memberDescription,
      config: {
        authorized: memberAuthorized,
        activeBridge: memberActiveBridge,
        noAutoAssignIps: memberNoAutoAssignIps,
      },
    };
    const response = await this.zerotier.updateNetworkMember({
      networkId: this.networkId,
      nodeId: this.nodeId,
      data: data,
      $,
    });
    $.export("$summary", `Successfully updated member "${this.nodeId}" on network "${this.networkId}"`);
    return response;
  },
};