/**
 * Lib centralisée pour la gestion des couleurs des tags
 */

// Couleurs prédéfinies pour les tags (cohérentes avec TagForm et TagsClient)
export const TAG_COLORS = [
  '#3B82F6', // Blue
  '#EF4444', // Red
  '#10B981', // Green
  '#F59E0B', // Yellow
  '#8B5CF6', // Purple
  '#EC4899', // Pink
  '#06B6D4', // Cyan
  '#84CC16', // Lime
  '#F97316', // Orange
  '#6366F1', // Indigo
  '#14B8A6', // Teal
  '#F43F5E', // Rose
  '#22C55E', // Emerald
  '#EAB308', // Amber
  '#A855F7', // Violet
  '#D946EF', // Fuchsia
] as const;

/**
 * Génère une couleur pour un tag basée sur son nom (hash déterministe)
 */
export function generateTagColor(tagName: string): string {
  // Hash simple du nom pour choisir une couleur
  let hash = 0;
  for (let i = 0; i < tagName.length; i++) {
    hash = tagName.charCodeAt(i) + ((hash << 5) - hash);
  }

  return TAG_COLORS[Math.abs(hash) % TAG_COLORS.length];
}

/**
 * Génère une couleur aléatoire pour un nouveau tag
 */
export function generateRandomTagColor(): string {
  return TAG_COLORS[Math.floor(Math.random() * TAG_COLORS.length)];
}

/**
 * Valide si une couleur est valide (format hex)
 */
export function isValidTagColor(color: string): boolean {
  return /^#[0-9A-F]{6}$/i.test(color);
}

/**
 * Récupère la couleur d'un tag, en générant une couleur par défaut si nécessaire
 */
export function getTagColor(tagName: string, existingColor?: string): string {
  if (existingColor && isValidTagColor(existingColor)) {
    return existingColor;
  }
  return generateTagColor(tagName);
}

/**
 * Génère un tableau de couleurs pour les graphiques en respectant les couleurs des tags
 */
export function generateChartColors(
  tags: Array<{ name: string; color?: string }>
): string[] {
  return tags.map((tag) => getTagColor(tag.name, tag.color));
}
