const db = require("../db");

const TRIAL_DAYS = 30;

async function licenseGate(req, res, next) {
  // Login-Seiten immer erlauben
  if (req.path === "/" || req.path.startsWith("/login")) return next();

  // Seriennummer-Seite immer erlauben
  if (req.path.startsWith("/serial-number")) return next();

  // Wenn nicht eingeloggt -> normal weiter (auth middleware macht das)
  if (!req.session?.user) return next();

  const [rows] = await db
    .promise()
    .query(
      `SELECT serial_number, trial_started_at FROM company_settings ORDER BY id ASC LIMIT 1`,
    );

  const settings = rows?.[0];

  // Wenn Seriennummer vorhanden -> alles ok
  if (settings?.serial_number) return next();

  // Wenn keine Trial gestartet: jetzt starten
  if (!settings?.trial_started_at) {
    await db
      .promise()
      .query(
        `UPDATE company_settings SET trial_started_at = NOW() WHERE id = ?`,
        [settings?.id || 1],
      );
    return next(); // Trial läuft ab jetzt
  }

  // Trial prüfen
  const trialStart = new Date(settings.trial_started_at);
  const now = new Date();

  const diffMs = now - trialStart;
  const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));

  if (diffDays < TRIAL_DAYS) {
    return next(); // Trial ist noch gültig
  }

  // ❌ Trial abgelaufen -> nur noch Seriennummer Seite
  return res.redirect("/serial-number");
}

module.exports = { licenseGate };
