const HEX_COLOR_PATTERN = /^#([0-9A-F]{3}|[0-9A-F]{6})$/i;

export function normalizeHexColor(value: unknown, fallback = '#000000'): string {
  if (typeof value !== 'string') {
    return fallback.toUpperCase();
  }

  const trimmed = value.trim();
  if (!HEX_COLOR_PATTERN.test(trimmed)) {
    return fallback.toUpperCase();
  }

  if (trimmed.length === 4) {
    const [, r, g, b] = trimmed.match(/^#([0-9A-F])([0-9A-F])([0-9A-F])$/i) ?? [];
    if (r && g && b) {
      return `#${r}${r}${g}${g}${b}${b}`.toUpperCase();
    }
  }

  return trimmed.toUpperCase();
}

export function isHexColorKey(key: string): boolean {
  return key === 'color' || key.endsWith('_color');
}
