import { writeGeneratedFile } from "../../helpers/fs";
import { generateFileHeader } from "../types/fileHeader";
import { generateWebhookEventFunction } from "../webhookEventFactory";

const FILE_NAME = "workspaceMember.ts";

export function generateWorkspaceMemberFetcher(outputDir: string): void {
  const content = `${generateFileHeader(FILE_NAME)}
import { AttioClient } from "./attioClient";
import { BaseFetcher } from "./base";
import { AttioWebhookEventPopulatedListener } from "./webhook";
import { AttioWorkspaceMember, WebhookEventDataByType } from "../types";

export class AttioWorkspaceMemberFetcher extends BaseFetcher {
  constructor(client: AttioClient) {
    super(client);
  }

  protected createBaseUrl(): string {
    return "/workspace_members";
  }

  async getAll(): Promise<AttioWorkspaceMember[]> {
    return this.extractData(
      this.client.doFetch(this.createBaseUrl())
    );
  }

  async getById(id: string): Promise<AttioWorkspaceMember> {
    return this.extractData(
      this.client.doFetch(\`\${this.createBaseUrl()}/\${id}\`)
    );
  }

  ${generateWebhookEventFunction({
    eventName: "workspace-member.created",
    idKey: "workspace_member_id",
    populatedType: "AttioWorkspaceMember",
  })}
}
`;

  writeGeneratedFile(outputDir, FILE_NAME, content);
}
