/**
 * Escapes HTML special characters in a string
 */
export function escapeHTML(str: string): string {
  return str
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}

/**
 * Formats a number with locale-specific formatting
 */
export function formatNumber(
  num: number | null | undefined,
  defaultValue: string = "0",
): string {
  if (num === undefined || num === null) return defaultValue;
  try {
    return num.toLocaleString();
  } catch (e) {
    return String(num);
  }
}

/**
 * Generates a consistent color based on an ID string
 */
export function generateColorFromId(id: string | null | undefined): string {
  if (!id) return "#7c7c7c"; // Default color for null/undefined

  // Generate a hash from the ID
  let hash = 0;
  for (let i = 0; i < id.length; i++) {
    hash = id.charCodeAt(i) + ((hash << 5) - hash);
  }

  // Convert hash to a hex color
  let color = "#";
  for (let i = 0; i < 3; i++) {
    // Generate more muted colors by using only part of the range
    // and adding a base value to avoid very dark colors
    const value = (hash >> (i * 8)) & 0xff;
    const scaledValue = Math.floor(100 + (value * 100) / 255); // Range 100-200 for more muted colors
    color += scaledValue.toString(16).padStart(2, "0");
  }
  return color;
}
