import { writeGeneratedFile } from "../../helpers/fs";
import logger from "../../helpers/logger";
import { generateFileHeader } from "./fileHeader";

const FILE_NAME = "base.ts";

export function generateBaseTypes(outputDir: string): void {
  logger.debug(`Generating base types file: ${FILE_NAME}`);

  const baseContent = `
${generateFileHeader(FILE_NAME)}

export interface WebhookPayload<T> {
  event_id: string;
  event_type: 'created' | 'updated' | 'deleted' | 'merged';
  entity_type: string;
  entity: T;
  timestamp: string;
  workspace_id: string;
}

export type WebhookHandler<T> = (payload: T) => Promise<void> | void;

export type EntityCreatedHandler<T> = (entity: T) => Promise<void> | void;

export type EntityUpdatedHandler<T> = (
  entity: T,
  updateInfo: {
    event: any;
    attributeId?: string;
    actor?: {
      type: string;
      id: string;
    }
  }
) => Promise<void> | void;

export type EntityDeletedHandler<T> = (entity: T | null, event: any) => Promise<void> | void;

export type EntityMergedHandler<T> = (entity: T, event: any) => Promise<void> | void;
`;

  writeGeneratedFile(outputDir, FILE_NAME, baseContent);
}
