/** ابزار کوچک رنگ برای سایه‌زنی تصاویر برداری محصولات */

function parse(hex: string): [number, number, number] {
  const h = hex.replace("#", "");
  const full = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
  const n = parseInt(full, 16);
  return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
}

function toHex([r, g, b]: [number, number, number]): string {
  return "#" + [r, g, b].map((v) => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, "0")).join("");
}

/** مقدار مثبت روشن‌تر و منفی تیره‌تر می‌کند (بازه -۱ تا ۱) */
export function shade(hex: string, amount: number): string {
  const rgb = parse(hex);
  const target = amount >= 0 ? 255 : 0;
  const t = Math.abs(amount);
  return toHex(rgb.map((c) => c + (target - c) * t) as [number, number, number]);
}

/** آیا رنگ تیره است؟ (برای انتخاب رنگ متن روی آن) */
export function isDark(hex: string): boolean {
  const [r, g, b] = parse(hex);
  return 0.299 * r + 0.587 * g + 0.114 * b < 140;
}
