// test_ws_logic.js
class FakeWS {
    constructor() {
        this.msgLog = [];
        this.terminated = false;
    }
    send(msg) {
        this.msgLog.push(msg);
    }
    terminate() {
        this.terminated = true;
    }
    close() {
        this.terminated = true;
    }
}

// SIMULATE _startHeartbeat() logic from ws-client.ts v0.5.12
function testLogic(isNodeWs, serverSendsPong) {
    let ws = new FakeWS();
    let connected = true;
    let lastPongTime = Date.now();
    let forceHeartbeatTimeoutIfNoPong = serverSendsPong; 
    let checkCounter = 0;
    
    // Fast forward 61 seconds in time
    let timeElapsed = 61000;
    let currentNow = Date.now() + timeElapsed;
    
    // Simulate heartbeat timeout logic
    let conditionMet = false;
    if ((isNodeWs || forceHeartbeatTimeoutIfNoPong) && currentNow - lastPongTime > 60000) {
        conditionMet = true;
        ws.terminate();
    }
    
    return {
        conditionMet: conditionMet,
        terminated: ws.terminated
    };
}

console.log("Scenario 1: Node WS (native ping/pong) MUST enforce 60s timeout:");
console.log(testLogic(true, false)); // expect true, true

console.log("\nScenario 2: Browser WS (fallback) + NO JSON PONG FROM SERVER MUST NOT enforce 60s timeout:");
console.log(testLogic(false, false)); // expect false, false  (PREVENTS FALSE POSITIVE)

console.log("\nScenario 3: Browser WS (fallback) + JSON PONG FROM SERVER MUST enforce 60s timeout:");
console.log(testLogic(false, true)); // expect true, true  (DETECTS ZOMBIE)
