/**
 * Rendu partage "jouet" pour tous les jeux : blocs ronds avec une fausse
 * profondeur 3D vue de face, et helper de couleur HSL (pour des palettes
 * toujours "de la meme famille" que le bloc precedent).
 */
const ToyBox = (() => {
  function hsl(h, s, l, a) {
    return `hsla(${((h % 360) + 360) % 360}, ${s}%, ${l}%, ${a === undefined ? 1 : a})`;
  }

  // Polygone aux angles arrondis (technique arcTo).
  function roundedPolygonPath(ctx, points, radius) {
    const len = points.length;
    const prev = points[len - 1];
    const first = points[0];
    ctx.beginPath();
    ctx.moveTo((prev.x + first.x) / 2, (prev.y + first.y) / 2);
    for (let i = 0; i < len; i++) {
      const p1 = points[i];
      const p2 = points[(i + 1) % len];
      ctx.arcTo(p1.x, p1.y, p2.x, p2.y, radius);
    }
    ctx.closePath();
  }

  /**
   * Dessine un bloc "bonbon" bien rond, tout plat (pas de fausse 3D).
   * hue en degres HSL ; squash (0..1) anime un petit "pop" d'apparition
   * ancre en bas du bloc.
   */
  function drawToyBlock(ctx, x, y, w, h, hue, opts) {
    opts = opts || {};
    const squash = opts.squash === undefined ? 1 : opts.squash;
    const sat = opts.saturation === undefined ? 78 : opts.saturation;
    const scaleY = 0.55 + squash * 0.45;
    const cy = y + h;
    const r = Math.min(opts.radius || 14, h * 0.4, w * 0.25);

    const front = hsl(hue, sat, 62);
    const frontShade = hsl(hue, sat, 54);

    ctx.save();
    ctx.translate(0, cy);
    ctx.scale(1, scaleY);
    ctx.translate(0, -cy);

    // face avant, bien ronde avec un leger degrade vertical
    const frontGrad = ctx.createLinearGradient(x, y, x, y + h);
    frontGrad.addColorStop(0, front);
    frontGrad.addColorStop(1, frontShade);
    ctx.beginPath();
    ctx.roundRect(x, y, w, h, r);
    ctx.fillStyle = frontGrad;
    ctx.fill();
    ctx.lineWidth = 3;
    ctx.strokeStyle = 'rgba(255,255,255,0.85)';
    ctx.stroke();

    // petit reflet "bonbon"
    ctx.beginPath();
    ctx.roundRect(x + w * 0.08, y + h * 0.14, w * 0.28, h * 0.28, 8);
    ctx.fillStyle = 'rgba(255,255,255,0.5)';
    ctx.fill();

    ctx.restore();
  }

  return { hsl, roundedPolygonPath, drawToyBlock };
})();
