import uuid
import pytest
from fastapi.testclient import TestClient
from app.services.presence import active_sessions

def test_websocket_presence_valid_session(client):
    # 1. Register tenant & initialize session
    domain = f"ws-{uuid.uuid4().hex[:6]}.com"
    reg_resp = client.post("/api/v1/tenant/register", json={
        "domain": domain,
        "name": "WS Test Store"
    })
    site_id = reg_resp.json()["siteId"]
    
    headers = {"Origin": f"http://{domain}"}
    init_resp = client.post("/api/v1/session/init", json={"siteId": site_id}, headers=headers)
    session_id = init_resp.json()["sessionId"]
    
    # Session should not be active before WS connection
    assert session_id not in active_sessions
    
    # 2. Connect WebSocket
    with client.websocket_connect(f"/ws/session/{session_id}") as websocket:
        # 3. Connected session must appear in active_sessions dictionary
        assert session_id in active_sessions
        assert active_sessions[session_id]["siteId"] == site_id
        assert active_sessions[session_id]["sessionId"] == session_id
        
    # 4. Disconnect removes session from active_sessions dictionary
    assert session_id not in active_sessions

def test_websocket_presence_unknown_session(client):
    unknown_session_id = "sess_nonexistent_000"
    
    # Attempting connection with invalid sessionId should raise WebSocketDisconnect / close code
    with pytest.raises(Exception):
        with client.websocket_connect(f"/ws/session/{unknown_session_id}"):
            pass
            
    assert unknown_session_id not in active_sessions
