function checkBrowser() {
  const userAgent = navigator.userAgent;
  return userAgent.includes("Chromium GOST") || userAgent.includes("YaBrowser");
}

function checkCsp(cspTimeout) {
  let timeoutMillis;
  if (cspTimeout) {
    timeoutMillis = cspTimeout * 1000;
  }
  else {
    timeoutMillis = 5000;
  }

  return new Promise((resolve, reject) => {
    const timeout = setTimeout(() => {
      reject(new Error('Истекло время ожидания загрузки плагина'));
    }, timeoutMillis);
    window.cadesplugin
        .then(() => {
          clearTimeout(timeout);
          if (window.cadesplugin.CreateObjectAsync) {
            return window.cadesplugin.CreateObjectAsync("CAdESCOM.About");
          } else {
            return Promise.resolve(window.cadesplugin.CreateObject("CAdESCOM.About"));
          }
        })
        .then((oAbout) => {
          if (!oAbout || !oAbout.CSPVersion) {
            throw new Error('Не удалось создать объект CAdESCOM.About');
          }
          return oAbout.CSPVersion();
        })
        .then((cspVersion) => {
          return Promise.all([
            cspVersion.MajorVersion,
            cspVersion.MinorVersion,
            cspVersion.BuildVersion
          ]);
        })
        .then(([majorVersion, minorVersion, buildVersion]) => {
          if (majorVersion === 5 && minorVersion === 0 && buildVersion >= 12000) {
            resolve(true);
          } else {
            console.error(
                `Версия CSP не подходит. Необходима версия 5.0.12000 и выше, текущая версия: ${majorVersion}.${minorVersion}.${buildVersion}`
            );
            resolve(false);
          }
        })
        .catch((error) => {
          console.error("Ошибка при получении версии CSP:", error);
          clearTimeout(timeout);
          resolve(false);
        });
  })
      .catch((error) => {
        console.error("Ошибка при проверке CSP:", error);
        return false;
      });
}

window.addEventListener('DOMContentLoaded', () => {
  const browserCheckInfo = document.getElementById('browser-check-info');
  const loginButton = document.getElementById('login-button');
  const loginLink = document.getElementById('login-link');

  const disableLogin = () => {
    if (loginButton && loginLink) {
      loginButton.href = '';
      loginLink.href = '';
      loginButton.classList.add('disabled');
      loginLink.classList.add('disabled-link');
    }
  };

  const browserPassed = checkBrowser();

  if (browserPassed) {
    checkCsp(5).then(cspCheckPassed => {
      if (cspCheckPassed) {
        if (browserCheckInfo) {
          browserCheckInfo.hidden = true;
        }
      } else {
        if (loginButton) {
          disableLogin();
        }
      }
    });
  } else {
      disableLogin();
  }
});