FROM vnc-server-base:latest
ENV CDP_PORT=9223

RUN mkdir -p /etc/nginx/conf.d && \
cat > /etc/nginx/conf.d/cdp.conf << 'EOF'
server {
    listen 9223;
    
    location / {
        proxy_pass http://127.0.0.1:9222;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";
        sub_filter_types application/json text/plain;
        sub_filter_once off;
        sub_filter 'ws://127.0.0.1:9223' 'ws://127.0.0.1:CDP_PORT_PLACEHOLDER';
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
        proxy_buffering off;
    }
}
EOF

RUN rm -f /etc/nginx/sites-enabled/default 

RUN cat > /entrypoint.sh << 'EOF'
#!/bin/bash
TARGET_URL=${TARGET_URL:-"about:blank"}

Xvfb :99 -screen 0 1280x1024x24 &
sleep 2
export DISPLAY=:99

CHROME_BIN=$(find /ms-playwright -name "chrome" -type f -executable 2>/dev/null | head -1)
if [ -z "$CHROME_BIN" ]; then
    CHROME_BIN=$(which chromium-browser 2>/dev/null || which google-chrome-stable 2>/dev/null || which chrome 2>/dev/null)
fi

"$CHROME_BIN" \
    --no-sandbox \
    --disable-gpu \
    --remote-debugging-port=9222 \
    --remote-debugging-address=0.0.0.0 \
    --remote-allow-origins=* \
    --disable-features=IsolateOrigins,site-per-process \
    "${TARGET_URL}" &

x11vnc -display :99 -forever -shared -rfbport 5900 &

/opt/novnc/utils/novnc_proxy --vnc localhost:5900 --listen 6080 &

sed -i "s/CDP_PORT_PLACEHOLDER/${CDP_PORT}/g" /etc/nginx/conf.d/cdp.conf &

nginx & nginx -s reload &

wait
EOF

RUN chmod +x /entrypoint.sh

EXPOSE 5900 6080 9223
EXPOSE 5900-5910 6080-6090 9222-9230


ENTRYPOINT ["/entrypoint.sh"]