/* Активация лицензии (клиент).
   Если лицензия требуется и невалидна — показываем блокирующее окно:
   код устройства (привязка 1 ключ = 1 ПК) + поле ввода ключа.
   В dev-режиме (required:false) ничего не делаем. */
(function () {
  "use strict";

  var OVERLAY_ID = "license-overlay";

  function el(tag, attrs, children) {
    var n = document.createElement(tag);
    if (attrs) Object.keys(attrs).forEach(function (k) {
      if (k === "style") n.setAttribute("style", attrs[k]);
      else if (k === "class") n.className = attrs[k];
      else n[k] = attrs[k];
    });
    (children || []).forEach(function (c) {
      n.appendChild(typeof c === "string" ? document.createTextNode(c) : c);
    });
    return n;
  }

  function styleOnce() {
    if (document.getElementById("license-overlay-style")) return;
    var css =
      "#" + OVERLAY_ID + "{position:fixed;inset:0;z-index:99999;background:rgba(10,12,14,.92);" +
      "backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;font-family:inherit}" +
      "#" + OVERLAY_ID + " .lic-card{width:min(440px,92vw);background:#15181c;border:1px solid #262b31;" +
      "border-radius:16px;padding:28px 26px;box-shadow:0 20px 60px rgba(0,0,0,.5);color:#e7ebef}" +
      "#" + OVERLAY_ID + " h2{margin:0 0 6px;font-size:20px;font-weight:700;color:#fff}" +
      "#" + OVERLAY_ID + " .lic-sub{margin:0 0 18px;font-size:13px;color:#9aa4ad;line-height:1.5}" +
      "#" + OVERLAY_ID + " label{display:block;font-size:12px;color:#9aa4ad;margin:0 0 6px;text-transform:uppercase;letter-spacing:.04em}" +
      "#" + OVERLAY_ID + " .lic-device{display:flex;gap:8px;margin-bottom:18px}" +
      "#" + OVERLAY_ID + " .lic-device input{flex:1;font-family:ui-monospace,Consolas,monospace;font-size:13px}" +
      "#" + OVERLAY_ID + " input{width:100%;box-sizing:border-box;background:#0e1114;border:1px solid #2b3138;" +
      "border-radius:10px;padding:11px 12px;color:#e7ebef;font-size:14px;outline:none}" +
      "#" + OVERLAY_ID + " input:focus{border-color:#c8f542}" +
      "#" + OVERLAY_ID + " button{cursor:pointer;border:none;border-radius:10px;font-weight:600;font-size:14px}" +
      "#" + OVERLAY_ID + " .lic-copy{background:#262b31;color:#e7ebef;padding:0 14px}" +
      "#" + OVERLAY_ID + " .lic-go{width:100%;background:#c8f542;color:#10130a;padding:12px;margin-top:6px;font-size:15px}" +
      "#" + OVERLAY_ID + " .lic-go:disabled{opacity:.5;cursor:default}" +
      "#" + OVERLAY_ID + " .lic-msg{margin-top:14px;font-size:13px;min-height:18px}" +
      "#" + OVERLAY_ID + " .lic-msg.err{color:#ff6b6b}" +
      "#" + OVERLAY_ID + " .lic-msg.ok{color:#c8f542}" +
      "#" + OVERLAY_ID + " .lic-or{display:flex;align-items:center;text-align:center;color:#6b7480;font-size:12px;margin:18px 0 14px}" +
      "#" + OVERLAY_ID + " .lic-or::before,#" + OVERLAY_ID + " .lic-or::after{content:'';flex:1;height:1px;background:#262b31}" +
      "#" + OVERLAY_ID + " .lic-or span{padding:0 12px;text-transform:uppercase;letter-spacing:.05em}";
    var s = el("style", { id: "license-overlay-style" }, []);
    s.textContent = css;
    document.head.appendChild(s);
  }

  function showOverlay(status) {
    styleOnce();
    var existing = document.getElementById(OVERLAY_ID);
    if (existing) existing.remove();

    var msg = el("div", { class: "lic-msg" }, []);
    function setMsg(text, cls) {
      msg.className = "lic-msg" + (cls ? " " + cls : "");
      msg.textContent = text || "";
    }

    // ── Пробный период ──
    var trialBtn = el("button", { class: "lic-go", type: "button" }, [
      "Начать пробный период — 7 дней",
    ]);
    trialBtn.addEventListener("click", function () {
      trialBtn.disabled = true;
      setMsg("Активируем пробный период…", "");
      fetch("/api/license/start-trial", { method: "POST" })
        .then(function (r) { return r.json(); })
        .then(function (s) {
          if (s && s.valid) {
            setMsg("Пробный период активен. Запускаем…", "ok");
            setTimeout(function () { window.location.reload(); }, 700);
          } else {
            trialBtn.disabled = false;
            setMsg(
              "Пробный период недоступен для этого компьютера (возможно, уже был использован). Введите ключ.",
              "err"
            );
          }
        })
        .catch(function () {
          trialBtn.disabled = false;
          setMsg("Нет связи с сервером. Проверьте интернет.", "err");
        });
    });

    // ── Ключ лицензии ──
    var deviceInput = el("input", {
      id: "lic-device-code",
      readOnly: true,
      value: status.fingerprint || "—",
    });
    var copyBtn = el("button", { class: "lic-copy", type: "button" }, ["Копир."]);
    copyBtn.addEventListener("click", function () {
      deviceInput.select();
      try { navigator.clipboard.writeText(deviceInput.value); } catch (e) {}
      copyBtn.textContent = "✓";
      setTimeout(function () { copyBtn.textContent = "Копир."; }, 1200);
    });

    var keyInput = el("input", {
      id: "lic-key-input",
      placeholder: "SPMK...",
      autocomplete: "off",
      spellcheck: false,
    });
    var goBtn = el("button", { class: "lic-go", type: "button" }, ["Активировать ключ"]);

    function activate() {
      var key = (keyInput.value || "").trim();
      if (!key) { setMsg("Вставьте ключ лицензии", "err"); return; }
      goBtn.disabled = true;
      setMsg("Проверяем ключ…", "");
      fetch("/api/license/activate", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ license_key: key }),
      })
        .then(function (r) { return r.json().then(function (j) { return { ok: r.ok, j: j }; }); })
        .then(function (res) {
          if (res.ok && res.j && res.j.valid) {
            setMsg("Лицензия активна. Запускаем…", "ok");
            setTimeout(function () { window.location.reload(); }, 700);
          } else {
            goBtn.disabled = false;
            setMsg(licenseError(res.j), "err");
          }
        })
        .catch(function () {
          goBtn.disabled = false;
          setMsg("Ошибка связи. Попробуйте ещё раз.", "err");
        });
    }

    goBtn.addEventListener("click", activate);
    keyInput.addEventListener("keydown", function (e) {
      if (e.key === "Enter") activate();
    });

    var card = el("div", { class: "lic-card" }, [
      el("h2", {}, ["Активация SPAMIMPAKTER"]),
      el("p", { class: "lic-sub" }, [
        "Попробуйте бесплатно 7 дней или введите купленный ключ. Программа привязывается к этому компьютеру.",
      ]),
      trialBtn,
      el("div", { class: "lic-or" }, [el("span", {}, ["или ключ"])]),
      el("label", {}, ["Код устройства"]),
      el("div", { class: "lic-device" }, [deviceInput, copyBtn]),
      el("label", {}, ["Ключ лицензии"]),
      keyInput,
      goBtn,
      msg,
    ]);

    var overlay = el("div", { id: OVERLAY_ID }, [card]);
    document.body.appendChild(overlay);
  }

  function licenseError(j) {
    if (j && j.expires_at && j.expires_at * 1000 < Date.now())
      return "Срок ключа истёк.";
    return "Ключ не подходит: проверьте, что он выдан для этого устройства и не истёк.";
  }

  function check() {
    fetch("/api/license/status")
      .then(function (r) { return r.json(); })
      .then(function (s) {
        if (s && s.required && !s.valid) showOverlay(s);
      })
      .catch(function () { /* статус недоступен — не блокируем (dev/сетевой сбой) */ });
  }

  if (document.readyState === "loading")
    document.addEventListener("DOMContentLoaded", check);
  else check();
})();
