<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Live Video Streaming</title>
</head>
<body>
    <video id="video" width="640" height="480" autoplay></video>
    <script>
        const video = document.getElementById('video');
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');

        // Access the user's camera
        navigator.mediaDevices.getUserMedia({ video: true })
            .then((stream) => {
                video.srcObject = stream;
            })
            .catch((error) => {
                console.error('Error accessing camera:', error);
            });

        // Open WebSocket connection to the backend
        const socket = new WebSocket('ws://localhost:8080/api/v1/baby-care/emotional/video-process');
        socket.binaryType = 'blob'; // Set binary type for sending binary data arraybuffer

        socket.onopen = () => {
            console.log('WebSocket connection opened');
            // Send video frames over WebSocket
            video.addEventListener('play', () => {
                const processVideo = () => {
                    if (video.paused || video.ended) {
                        return;
                    }
                    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
                    canvas.toBlob(blob => {
                        socket.send(blob);
                    }, 'image/jpeg');
                    setTimeout(processVideo, 100);
                };
                processVideo();
            });
        }

        socket.onclose = (event) => {
            console.log('WebSocket connection closed with code:', event.code);
            console.log('Reason:', event.reason);
        };


        socket.onerror = (error) => {
            console.error('WebSocket error:', error);
        };

        // Convert data URI to Blob
        function dataURItoBlob(dataURI) {
            const byteString = atob(dataURI.split(',')[1]);
            const arrayBuffer = new ArrayBuffer(byteString.length);
            const byteArray = new Uint8Array(arrayBuffer);
            for (let i = 0; i < byteString.length; i++) {
                byteArray[i] = byteString.charCodeAt(i);
            }
            return new Blob([arrayBuffer], { type: 'image/jpeg' });
        }
    </script>
</body>
</html>