interface CWReference {
  id: number;
  name: string;
  _info?: Record<string, string>;
}

interface CWVendorReference {
  id: number;
  identifier: string;
  name: string;
  _info?: Record<string, string>;
}

interface CWCustomField {
  id: number;
  caption: string;
  type: string;
  entryMethod: string;
  numberOfDecimals: number;
  value: unknown;
  connectWiseId: string;
  rowNum: number;
  userDefinedFieldRecId: number;
  podId: string;
}

export interface CatalogItem {
  id: number;
  identifier: string;
  description: string;
  inactiveFlag: boolean;
  subcategory: CWReference;
  type: CWReference;
  productClass: string;
  serializedFlag: boolean;
  serializedCostFlag: boolean;
  phaseProductFlag: boolean;
  unitOfMeasure: CWReference;
  minStockLevel: number;
  price: number;
  cost: number;
  priceAttribute: string;
  taxableFlag: boolean;
  dropShipFlag: boolean;
  specialOrderFlag: boolean;
  customerDescription: string;
  manufacturer: CWReference;
  manufacturerPartNumber: string;
  vendor: CWVendorReference;
  vendorSku: string;
  notes: string;
  integrationXRef: string;
  sla: CWReference;
  entityType: CWReference;
  recurringFlag: boolean;
  recurringRevenue: number;
  recurringCost: number;
  recurringOneTimeFlag: boolean;
  recurringBillCycle: CWReference;
  recurringCycleType: string;
  calculatedPriceFlag: boolean;
  calculatedCostFlag: boolean;
  category: CWReference;
  calculatedPrice: number;
  calculatedCost: number;
  billableOption: string;
  connectWiseID: string;
  agreementType: CWReference;
  markupPercentage: number;
  markupFlag: boolean;
  autoUpdateUnitCostFlag: boolean;
  autoUpdateUnitPriceFlag: boolean;
  _info?: Record<string, string>;
  customFields?: CWCustomField[];
}
