import {CadesHelper} from "@webbpm/base-package";

export class AccessChecker {

  public static checkBrowser(): boolean {
    const userAgent = navigator.userAgent;
    return userAgent.indexOf("Chromium GOST") > -1 || userAgent.indexOf("YaBrowser") > -1;
  }

  public static checkCsp(cspTimeout: number): Promise<boolean> {
    let timeoutMillis: number;
    if (cspTimeout) {
      timeoutMillis = cspTimeout * 1000;
    }
    else {
      timeoutMillis = 5000;
    }
    return new Promise<boolean>((resolve, reject) => {
      const timeout = setTimeout(() => {
        reject(new Error(`Истекло время ожидания загрузки плагина`));
      }, timeoutMillis);
      return CadesHelper.plugin()
          .then(() => {
            clearTimeout(timeout);
            return CadesHelper.plugin().CreateObjectAsync("CAdESCOM.About");
          })
          .then((oAbout) => {
            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);
            resolve(false);
          })
          .finally(() => {
            clearTimeout(timeout);

          })
    })
        .catch((error) => {
          console.error("Ошибка при получении версии CSP:", error);
          return false;
        });
  }
}