#!/usr/bin/env node
'use strict';
/*
 * בדיקת קצה-לקצה: "backend ללא-מפעיל".
 * 1) מכשיר Node מפרסם תמונת-API סטטית ל-/api/status ואז נסגר לגמרי.
 * 2) מבקר טרי (מנוע הדפדפן, ללא אף peer חי בעולם) קורא ל-/api/status
 *    ומקבל את התשובה ישירות מהממסרים — בלי ששום עובד-שרת פעיל.
 */
process.env.SC_TEST = '1';
const fs = require('node:fs');
const path = require('node:path');
const vm = require('node:vm');

const mod = require('./dump-test.js');
const t = mod.__test;

const PATH = '/api/status';
const PAYLOAD = { ok: true, msg: 'served-from-relays', n: 42, at: Date.now() };

(async () => {
  console.log('שלב 1: מפרסם תמונת-API ואז סוגר את המכשיר לגמרי…');
  await mod.ready();
  await mod.snapshot(PATH, PAYLOAD);
  await new Promise((r) => setTimeout(r, 2500)); // זמן להתפשטות ברשת
  await mod.stop();
  console.log('המכשיר נסגר. אין אף עובד-שרת חי כעת.');

  console.log('שלב 2: מבקר טרי (מנוע דפדפן) קורא ל-' + PATH + ' — רק מהרשת…');
  t.ensureId(); t.deriveKeys();
  const sdk = t.buildWebSdk();

  // מעטפת-דפדפן מינימלית סביב מנוע ה-SDK
  const store = {};
  const sandbox = {
    window: {}, // אין window.fetch → מוֹנקיפאטש לא מותקן; קוראים ל-SkyCloud.api ישירות
    localStorage: { getItem: (k) => (k in store ? store[k] : null), setItem: (k, v) => { store[k] = String(v); }, removeItem: (k) => { delete store[k]; } },
    WebSocket, crypto, TextEncoder, TextDecoder, atob, btoa, Response, URL,
    setTimeout, clearTimeout, setInterval, clearInterval, console,
  };
  vm.createContext(sandbox);
  vm.runInContext(sdk, sandbox, { filename: 'cloud-web.js' });

  const SkyCloud = sandbox.window.SkyCloud;
  if (!SkyCloud) throw new Error('SDK לא נטען');
  await SkyCloud.ready;
  await new Promise((r) => setTimeout(r, 3500)); // זמן לקבלת התמונה מהממסרים

  const res = await SkyCloud.api(PATH, { staticFallbackMs: 1500, timeoutMs: 15000 });
  const body = await res.json();
  console.log('התקבל מהרשת (ללא מפעיל):', JSON.stringify(body));

  const okStatus = res.status === 200;
  const okBody = body && body.msg === 'served-from-relays' && body.n === 42;
  if (okStatus && okBody) {
    console.log('\nPASS: backend ללא-מפעיל עובד — התשובה הוגשה מהרשת המבוזרת עם אפס peers חיים.');
    process.exit(0);
  } else {
    console.error('\nFAIL: לא התקבלה התמונה הצפויה. status=' + res.status);
    process.exit(1);
  }
})().catch((err) => { console.error('שגיאת E2E:', err.message); process.exit(1); });
