/**
 * Shades a hex color by a given percentage.
 * Positive values lighten the color, negative values darken it.
 *
 * @param {string} color - A 7-character hex color string (e.g. "#ffcc00").
 * @param {number} percent - A percentage from -100 to 100 to adjust brightness.
 * @returns {string} - The adjusted hex color string.
 */
function shadeColor(color, percent) {
  const num = parseInt(color.slice(1), 16);
  const amt = Math.round(2.55 * percent);

  let r = (num >> 16) + amt;
  let g = ((num >> 8) & 0xff) + amt;
  let b = (num & 0xff) + amt;

  // Clamp each component between 0 and 255
  r = Math.min(255, Math.max(0, r));
  g = Math.min(255, Math.max(0, g));
  b = Math.min(255, Math.max(0, b));

  const shaded = (1 << 24) + (r << 16) + (g << 8) + b;

  return `#${shaded.toString(16).slice(1)}`;
}

export { shadeColor };
