package com.l7tech.gateway.common.licensing;

import com.l7tech.util.DeserializeSafe;
import java.io.Serializable;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.Set;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.builder.HashCodeBuilder;

@DeserializeSafe
public class FeatureLicense implements Serializable {
   public static final String WILDCARD = "*";
   private final long id;
   private final String description;
   private final String licenseeName;
   private final String licenseeContactEmail;
   private final Date startDate;
   private final Date expiryDate;
   private final String eulaText;
   private final Set<String> attributes;
   private final Set<String> featureSets;
   private final String hostname;
   private final String ip;
   private final String productName;
   private final String majorVersion;
   private final String minorVersion;
   private final String featureLabel;
   private final X509Certificate trustedIssuer;
   private final LicenseDocument licenseDocument;
   static final long serialVersionUID = 2124212713327904496L;
   private static final String a;

   public FeatureLicense(
      long var1,
      String var3,
      String var4,
      String var5,
      Date var6,
      Date var7,
      String var8,
      Set<String> var9,
      Set<String> var10,
      String var11,
      String var12,
      String var13,
      String var14,
      String var15,
      String var16,
      X509Certificate var17,
      LicenseDocument var18
   ) {
      this.id = var1;
      this.description = var3;
      this.licenseeName = var4;
      this.licenseeContactEmail = var5;
      this.startDate = var6;
      this.expiryDate = var7;
      this.eulaText = var8;
      this.attributes = var9;
      this.featureSets = var10;
      this.hostname = var11;
      this.ip = var12;
      this.productName = var13;
      this.majorVersion = var14;
      this.minorVersion = var15;
      this.featureLabel = var16;
      this.trustedIssuer = var17;
      this.licenseDocument = var18;
   }

   public boolean isValid() {
      return this.hasTrustedIssuer() && this.isLicensePeriodCurrent();
   }

   public boolean isVersionEnabled(String var1, String var2) {
      return ("*".equals(this.majorVersion) || this.majorVersion.equals(var1)) && ("*".equals(this.minorVersion) || this.minorVersion.equals(var2));
   }

   public boolean isFutureVersionEnabled(String var1, String var2) {
      if ("*".equals(this.majorVersion)) {
         return true;
      }

      if (this.majorVersion.equals(var1)) {
         if ("*".equals(this.minorVersion)) {
            return true;
         }

         Integer var5 = Integer.valueOf(var2);
         Integer var6 = Integer.valueOf(this.minorVersion);
         return var5 < var6;
      } else {
         Integer var3 = Integer.valueOf(var1);
         Integer var4 = Integer.valueOf(this.majorVersion);
         return var3 < var4;
      }
   }

   public boolean isLicensePeriodCurrent() {
      return this.isLicensePeriodCurrent(System.currentTimeMillis());
   }

   public boolean isLicensePeriodCurrent(long var1) {
      return this.isLicensePeriodStartBefore(var1) && this.isLicensePeriodExpiryAfter(var1);
   }

   public boolean isLicensePeriodStartBefore(long var1) {
      return var1 > (null != this.startDate ? this.startDate.getTime() : Long.MIN_VALUE);
   }

   public boolean isLicensePeriodExpiryAfter(long var1) {
      return var1 < (null != this.expiryDate ? this.expiryDate.getTime() : Long.MAX_VALUE);
   }

   public boolean hasTrustedIssuer() {
      return null != this.trustedIssuer;
   }

   public boolean isProductEnabled(String var1) {
      return "*".equals(var1) || this.productName.equals(var1);
   }

   public long getId() {
      return this.id;
   }

   public String getDescription() {
      return this.description;
   }

   public String getLicenseeName() {
      return this.licenseeName;
   }

   public String getLicenseeContactEmail() {
      return this.licenseeContactEmail;
   }

   public Date getStartDate() {
      return this.startDate;
   }

   public Date getExpiryDate() {
      return this.expiryDate;
   }

   public String getEulaText() {
      return this.eulaText;
   }

   public Set<String> getAttributes() {
      return this.attributes;
   }

   public Set<String> getFeatureSets() {
      return this.featureSets;
   }

   public String getHostname() {
      return this.hostname;
   }

   public String getIp() {
      return this.ip;
   }

   public String getProductName() {
      return this.productName;
   }

   public String getMajorVersion() {
      return this.majorVersion;
   }

   public String getMinorVersion() {
      return this.minorVersion;
   }

   public String getFeatureLabel() {
      return this.featureLabel;
   }

   public X509Certificate getTrustedIssuer() {
      return this.trustedIssuer;
   }

   public LicenseDocument getLicenseDocument() {
      return this.licenseDocument;
   }

   @Override
   public int hashCode() {
      return new HashCodeBuilder(43, 47)
         .append(this.id)
         .append(this.description)
         .append(this.licenseeName)
         .append(this.licenseeContactEmail)
         .append(this.startDate)
         .append(this.expiryDate)
         .append(this.eulaText)
         .append(this.attributes)
         .append(this.featureSets)
         .append(this.hostname)
         .append(this.ip)
         .append(this.productName)
         .append(this.majorVersion)
         .append(this.minorVersion)
         .append(this.featureLabel)
         .append(this.trustedIssuer)
         .append(this.licenseDocument)
         .toHashCode();
   }

   @Override
   public boolean equals(Object var1) {
      if (this == var1) {
         return true;
      } else if (null != var1 && this.getClass() == var1.getClass()) {
         FeatureLicense var2 = (FeatureLicense)var1;
         return ObjectUtils.equals(this.id, var2.id)
            && ObjectUtils.equals(this.description, var2.getDescription())
            && ObjectUtils.equals(this.licenseeName, var2.getLicenseeName())
            && ObjectUtils.equals(this.licenseeContactEmail, var2.getLicenseeContactEmail())
            && ObjectUtils.equals(this.startDate, var2.getStartDate())
            && ObjectUtils.equals(this.expiryDate, var2.getExpiryDate())
            && ObjectUtils.equals(this.eulaText, var2.getEulaText())
            && ObjectUtils.equals(this.attributes, var2.getAttributes())
            && ObjectUtils.equals(this.featureSets, var2.getFeatureSets())
            && ObjectUtils.equals(this.hostname, var2.getHostname())
            && ObjectUtils.equals(this.ip, var2.getIp())
            && ObjectUtils.equals(this.productName, var2.getProductName())
            && ObjectUtils.equals(this.majorVersion, var2.getMajorVersion())
            && ObjectUtils.equals(this.minorVersion, var2.getMinorVersion())
            && ObjectUtils.equals(this.featureLabel, var2.getFeatureLabel())
            && ObjectUtils.equals(this.trustedIssuer, var2.getTrustedIssuer())
            && ObjectUtils.equals(this.licenseDocument, var2.getLicenseDocument());
      } else {
         return false;
      }
   }

   @Override
   public String toString() {
      return this.id + a + this.licenseeName + ")";
   }

   static {
      String var10002 = a(69, a("s'"));
      byte var10001 = -1;
      a = var10002;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 113);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 22;
            case 1 -> 74;
            case 2 -> 89;
            case 3 -> 39;
            case 4 -> 32;
            case 5 -> 92;
            default -> 113;
         });
      }

      return new String(var10001).intern();
   }
}
