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

const FILE_NAME = "attribute.ts";

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

  const attributeContent = `
${generateFileHeader(FILE_NAME)}

export interface AttioAttribute {
  id: {
    workspace_id: string;
    object_id: string;
    attribute_id: string;
  };
  title: string;
  description: string | null;
  api_slug: string;
  type: string;
  is_system_attribute: boolean;
  is_writable: boolean;
  is_required: boolean;
  is_unique: boolean;
  is_multiselect: boolean;
  is_default_value_enabled: boolean;
  is_archived: boolean;
  default_value: any;
  relationship: any;
  config: Record<string, any>;
  created_at: string;
}

export type CurrencyCode =
  | "AUD"
  | "BRL"
  | "BEL"
  | "CAD"
  | "CNY"
  | "COP"
  | "CZK"
  | "DKK"
  | "EUR"
  | "HKD"
  | "ISK"
  | "INR"
  | "ILS"
  | "JPY"
  | "KRW"
  | "MYR"
  | "MXN"
  | "NTD"
  | "NZD"
  | "NGN"
  | "NOK"
  | "XPF"
  | "PEN"
  | "PHP"
  | "PLN"
  | "GBP"
  | "SAR"
  | "SGD"
  | "ZAR"
  | "SEK"
  | "CHF"
  | "AED"
  | "USD";

export interface AttioSelectOption {
  id: {
    workspace_id: string;
    object_id: string;
    attribute_id: string;
    option_id: string;
  };
  title: string;
  is_archived: boolean;
}

export interface AttioStatus {
  id: {
    workspace_id: string;
    object_id: string;
    attribute_id: string;
    status_id: string;
  };
  title: string;
  is_archived: boolean;
  celebration_enabled: boolean;
  target_time_in_status: string | null;
}
`;

  writeGeneratedFile(outputDir, FILE_NAME, attributeContent);
}
