/**
 * Available clustering algorithms
 */
export type ClusteringAlgorithm = 'simple' | 'kmeans' | 'hierarchical' | 'direct';

/**
 * Linkage methods for hierarchical clustering
 */
export type HierarchicalLinkage = 'single' | 'complete' | 'average';

/**
 * Configuration options for the KeywordClusterer
 */
export interface KeywordClustererOptions {
  /** OpenAI API key */
  apiKey: string;
  /** OpenAI model to use for embeddings */
  embeddingModel?: string;
  /** OpenAI model to use for generating cluster names and descriptions */
  completionModel?: string;
  /** Minimum number of items to form a cluster */
  minClusterSize?: number;
  /** Maximum cosine distance for items to be considered similar */
  distanceThreshold?: number;
  /** Clustering algorithm to use */
  algorithm?: ClusteringAlgorithm;
  /** Number of clusters for k-means algorithm */
  k?: number;
  /** Maximum iterations for k-means algorithm */
  maxIterations?: number;
  /** Linkage method for hierarchical clustering */
  linkage?: HierarchicalLinkage;
  /** Context description to guide clustering and naming (e.g., "AI chat topics", "Google Ads keywords") */
  context?: string;
}

/**
 * Represents a cluster of keywords
 */
export interface Cluster {
  /** Items in the cluster */
  items: string[];
  /** Name of the cluster */
  name?: string;
  /** Description of the cluster */
  description?: string;
}