/**
 * Agent Alias Generator
 *
 * Generates unique funny aliases for agents using adjective-animal combinations.
 * E.g., "jolly-penguin", "bold-eagle", "swift-otter".
 */

import { uniqueNamesGenerator, adjectives, animals } from 'unique-names-generator';
import type { AgentRepository } from '../db/repositories/agent-repository.js';

const MAX_RETRIES = 10;

/**
 * Generate a unique agent alias that doesn't collide with existing agent names.
 *
 * @param repository - Agent repository to check for name collisions
 * @returns A unique adjective-animal alias (e.g., "jolly-penguin")
 */
export async function generateUniqueAlias(repository: AgentRepository): Promise<string> {
  for (let i = 0; i < MAX_RETRIES; i++) {
    const alias = uniqueNamesGenerator({
      dictionaries: [adjectives, animals],
      separator: '-',
      style: 'lowerCase',
    });

    const existing = await repository.findByName(alias);
    if (!existing) {
      return alias;
    }
  }

  throw new Error(`Failed to generate unique alias after ${MAX_RETRIES} attempts`);
}
