
import os
os.environ["DISPLAY"] = ""
os.environ["PLAYWRIGHT_BROWSERS_PATH"] = "0"

from flask import Flask, request, jsonify
from playwright.sync_api import sync_playwright
import tempfile
import base64

app = Flask(__name__)

@app.route('/health')
def health():
    return jsonify({"status": "ok"})

@app.route('/visit', methods=['POST'])
def visit():
    data = request.json or {}
    url = data.get('url', 'https://example.com')
    wait_for = data.get('wait_for', 'networkidle')
    screenshot = data.get('screenshot', False)
    selector = data.get('selector', None)
    
    try:
        with sync_playwright() as p:
            browser = p.chromium.launch(
                headless=True,
                executable_path="/usr/bin/chromium",
                args=[
                    "--no-sandbox",
                    "--disable-gpu",
                    "--disable-dev-shm-usage",
                    "--disable-blink-features=AutomationControlled",
                    "--window-size=1920,1080",
                ]
            )
            page = browser.new_page(viewport={"width": 1920, "height": 1080})
            page.set_extra_http_headers({
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            })
            response = page.goto(url, wait_until=wait_for, timeout=30000)
            
            result = {
                "url": url,
                "status": response.status if response else None,
                "title": page.title(),
                "html": page.content()[:5000],
            }
            
            if selector:
                el = page.query_selector(selector)
                result["selector_text"] = el.text_content() if el else None
            
            if screenshot:
                with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as f:
                    page.screenshot(path=f.name, full_page=True)
                    with open(f.name, 'rb') as img:
                        result["screenshot_base64"] = base64.b64encode(img.read()).decode('utf-8')
                    os.unlink(f.name)
            
            browser.close()
            return jsonify({"success": True, "result": result})
    except Exception as e:
        return jsonify({"success": False, "error": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000, threaded=True)
