import { useEffect, useRef } from "react";
import { createWebSocket, sharedWsUrl } from "../../../../services/socket";

const wsClient = createWebSocket(sharedWsUrl);

const pointArr: { x: number; y: number }[] = [];

export default function ResultLayer(props: {
	width: number;
	height: number;
	leftPadding: number;
	rightPadding: number;
	topPadding: number;
	bottomPadding: number;
	columns: number;
	rows: number;
	visibility: 'hidden' | 'visible'; 
}) {
	console.log('props---', props)
	const xStartPx = props.leftPadding;
	const xEndPx = props.width - props.rightPadding;
	const xStepPx = (props.width - props.leftPadding - props.rightPadding) / props.columns;
	const yStartPx = props.topPadding;
	// const yEndPx = props.height - props.bottomPadding;
	const yStepPx = (props.height - props.topPadding - props.bottomPadding) / props.rows;

	const unitPx = xStepPx / 10;
	// const pointsPx = points.map(p => ({ x: p.x * unitPx, y: p.y * unitPx + 4 })); // 特意偏移

	const canvasRef = useRef<HTMLCanvasElement | null>(null);

	// const [rtPoints, setRtPoints] = useState<{ x: number; y: number }[]>([]);

	// const draw = useCallback(
	// 	(ctx: CanvasRenderingContext2D) => {
	// 		for (let idx = 0; idx < pointsPx.length; idx++) {
	// 			if (idx === 0) {
	// 				ctx.moveTo(pointsPx[idx].x, pointsPx[idx].y);
	// 			} else {
	// 				ctx.lineTo(pointsPx[idx].x, pointsPx[idx].y);
	// 			}
	// 		}
	// 		ctx.stroke();
	// 	},
	// 	[pointsPx, xEndPx, xStartPx, yStartPx, yStepPx]
	// );

	useEffect(() => {
		const subscription = wsClient.dataOb.subscribe(data => {
			let isRight = false;
			if(data.path === "/measurement-task/measurement-task"){

			}
			if (data.path === "/measurement-task/event") {
				const canvas = canvasRef.current;
				if (!canvas) return;

				const ctx = canvas.getContext("2d");
				if (!ctx) return;
				console.log('data.data---', data.data)
				//@ts-ignore
				if (data.data === "START_RECORD_LEFT") {
					// setRtPoints([]);
					pointArr.length = 0;
					ctx.resetTransform();
					ctx.clearRect(0, 0, canvas.width, canvas.height);
					setTimeout(() => {
						ctx.strokeStyle = "blue";
						const xOffset = (xEndPx - xStartPx) / 2;
						const yOffset = yStepPx * 2;
						ctx.translate(xStartPx + xOffset, yStartPx + yOffset);
						ctx.beginPath();
					}, 0);
					//@ts-ignore
				} else if (data.data === "START_RECORD_RIGHT") {
					// pointArr.length = 0;
					isRight = true;
				}
			} else if (data.path === "/measurement-task/point-report") {
				// console.log(data.data);
				// setRtPoints(rtPoints.concat([data.data]));
				if(isRight){
					pointArr.length = 0
				}
				//@ts-ignore
				pointArr.push(data.data);

				const canvas = canvasRef.current;
				if (!canvas) return;

				const ctx = canvas.getContext("2d");
				if (!ctx) return;

				const pointsPx = pointArr.map(p => ({ x: p.x * unitPx, y: p.y * unitPx }));

				for (let idx = 0; idx < pointsPx.length; idx++) {
					if (idx === 0) {
						ctx.moveTo(pointsPx[idx].x, pointsPx[idx].y+6);
					} else {
						ctx.lineTo(pointsPx[idx].x, pointsPx[idx].y+6);
					}
				}
				// ctx.stroke();
			}
		});
		wsClient.connect();
		return () => subscription.unsubscribe();
	}, [unitPx, xEndPx, xStartPx, yStartPx, yStepPx]);

	return (
		<div style={{visibility: props.visibility}}>
			<canvas ref={canvasRef} width={props.width} height={props.height}></canvas>
		</div>
	);
}
