import { Pen } from "@meta2d/core";

export function monitorNoRoom(ctx: CanvasRenderingContext2D, pen: Pen): void {
  const radius = pen.calculative.borderRadius;
  const {
    x: rectX,
    y: rectY,
    width: rectWidth,
    height: rectHeight,
  } = pen.calculative.worldRect;

  ctx.save();

  // 条纹参数
  const stripeSpacing = 12;
  const stripeColor = "#d4d8d7";

  // 1. 绘制灰色背景
  ctx.beginPath();
  ctx.roundRect(rectX, rectY, rectWidth, rectHeight, radius);
  ctx.fillStyle = "#f1f1f1";
  ctx.fill();

  // 2. 创建裁剪区域
  ctx.beginPath();
  ctx.roundRect(rectX, rectY, rectWidth, rectHeight, radius);
  ctx.clip();

  // 3. 计算斜线参数（修正方向算法）
  const diagonal = Math.sqrt(rectWidth ** 2 + rectHeight ** 2);
  const bStep = stripeSpacing * Math.sqrt(2); // 修正步长算法

  // 4. 动态计算绘制范围（解决窄矩形问题）
  const startB = rectY - rectX - diagonal * 2; // 扩展起始位置
  const endB = rectY + rectHeight + rectX + diagonal * 2; // 扩展结束位置

  // 5. 绘制斜线（修正坐标计算）
  ctx.strokeStyle = stripeColor;
  ctx.lineWidth = 6;

  for (let b = startB; b <= endB; b += bStep) {
    ctx.beginPath();
    ctx.moveTo(rectX - diagonal, -(rectX - diagonal) + b);
    ctx.lineTo(
      rectX + rectWidth + diagonal,
      -(rectX + rectWidth + diagonal) + b
    );
    ctx.stroke();
  }

  ctx.restore();
}

export const monitorNoRoomData = {
  name: "monitorNoRoom",
  width: 214,
  height: 140,
  borderRadius: 12,
};
