'use strict';
// Update-check: vergelijkt de draaiende versie met de nieuwste op p33k.nl.
// Faalt stil (offline = geen probleem). Download gebeurt door de gebruiker zelf
// (we vervangen geen bestanden automatisch — veilig en transparant).
const https = require('https');
const fs = require('fs');
const path = require('path');

const MANIFEST = 'https://modelrailpro.com/version.json';

function currentVersion() {
  // Hard ingebakken versie (werkt ook in de standalone-binary). Valt terug op package.json.
  try { return require('./version'); } catch (_) {}
  try { return JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')).version || '0.0.0'; }
  catch (_) { return '0.0.0'; }
}

// semver-vergelijking: >0 als a nieuwer dan b
function cmp(a, b) {
  const pa = String(a).split('.').map((n) => parseInt(n, 10) || 0);
  const pb = String(b).split('.').map((n) => parseInt(n, 10) || 0);
  for (let i = 0; i < 3; i++) { if ((pa[i] || 0) !== (pb[i] || 0)) return (pa[i] || 0) - (pb[i] || 0); }
  return 0;
}

function fetchManifest(timeoutMs = 5000) {
  return new Promise((resolve) => {
    const req = https.get(MANIFEST, { timeout: timeoutMs }, (res) => {
      if (res.statusCode !== 200) { res.resume(); return resolve(null); }
      let body = '';
      res.on('data', (c) => { body += c; if (body.length > 1e5) req.destroy(); });
      res.on('end', () => { try { resolve(JSON.parse(body)); } catch (_) { resolve(null); } });
    });
    req.on('timeout', () => req.destroy());
    req.on('error', () => resolve(null));
  });
}

let _cache = null, _checked = 0;
async function check(force) {
  const cur = currentVersion();
  // hooguit eens per uur echt over het net
  if (!force && _cache && (Date.now() - _checked) < 3600e3) return _cache;
  const m = await fetchManifest();
  const latest = m && m.version ? m.version : null;
  const out = {
    current: cur,
    latest: latest,
    updateAvailable: !!(latest && cmp(latest, cur) > 0),
    notes: m && m.notes ? m.notes : '',
    url: m && m.url ? m.url : 'https://p33k.nl/baanbrein/',
    checkedOk: !!m,
  };
  _cache = out; _checked = Date.now();
  return out;
}

module.exports = { check, currentVersion };
