"""Teste visual isolado, com /api/session simulado; sem tráfego clínico real."""
from pathlib import Path
from playwright.sync_api import sync_playwright
root=Path(__file__).resolve().parent.parent
css=(root/'public/app.css').read_text()
js=(root/'public/app.js').read_text()
html=(root/'public/index.html').read_text().replace('<link rel="stylesheet" href="/app.css">',f'<style>{css}</style>')
mock="<script>window.fetch=async()=>({ok:true,status:200,json:async()=>({configured:false,authenticated:false,setup_code_required:true})});</script>"
html=html.replace('<script type="module" src="/app.js"></script>',f'{mock}<script>{js}</script>')
with sync_playwright() as pw:
    browser=pw.chromium.launch(headless=True,executable_path='/usr/bin/chromium',args=['--no-sandbox'])
    iPhone=pw.devices['iPhone 13']
    configs=[('iphone',iPhone),('android',dict(viewport={'width':390,'height':844},device_scale_factor=2,is_mobile=True,has_touch=True,user_agent='Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36'))]
    for typ,kwargs in configs:
        ctx=browser.new_context(**kwargs)
        page=ctx.new_page()
        errors=[]
        page.on('pageerror',lambda err:errors.append(str(err)))
        page.set_content(html,wait_until='load')
        page.get_by_role('button',name='Instalar aplicativo no celular').click()
        modal=page.locator('[role="dialog"]')
        assert modal.is_visible()
        expected='Safari' if typ=='iphone' else 'Android (Chrome)'
        assert expected in modal.inner_text(),modal.inner_text()
        assert not errors, errors
        page.screenshot(path=str(root/'previews'/f'instalacao-{typ}.png'),full_page=True)
        print(typ.upper(), 'OK | orientações exibidas |',modal.inner_text().replace('\n',' ')[:110])
        ctx.close()
    browser.close()
