package com.l7tech.gateway.common.cluster;

import com.l7tech.objectmodel.NameableEntity;
import com.l7tech.security.rbac.RbacAttribute;
import com.l7tech.util.DeserializeSafe;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import java.io.Serializable;
import org.hibernate.annotations.Proxy;

@Entity
@Proxy(lazy = false)
@Table(name = "cluster_info")
@DeserializeSafe
public class ClusterNodeInfo implements Comparable<ClusterNodeInfo>, NameableEntity, Serializable {
   private static final long serialVersionUID = 3387085760350960428L;
   private String nodeId;
   private String name;
   private String mac;
   private String address;
   private String esmAddress;
   private String multicastAddress;
   private long boottime;
   private long uptime;
   private double avgLoad;
   private long lastUpdateTimeStamp;
   private static final String a;

   @Id
   @Column(name = "nodeid", nullable = false, length = 32)
   public String getNodeIdentifier() {
      return this.nodeId;
   }

   public void setNodeIdentifier(String var1) {
      this.nodeId = var1;
   }

   @RbacAttribute
   @Column(name = "name", nullable = false, length = 128)
   public String getName() {
      return this.name;
   }

   public void setName(String var1) {
      this.name = var1;
   }

   @Column(name = "mac", nullable = false, length = 18)
   public String getMac() {
      return this.mac;
   }

   public void setMac(String var1) {
      this.mac = var1;
   }

   @Column(name = "address", nullable = false, length = 39)
   public String getAddress() {
      return this.address;
   }

   public void setAddress(String var1) {
      this.address = var1;
   }

   @Column(name = "esm_address", nullable = false, length = 39)
   public String getEsmAddress() {
      return this.esmAddress;
   }

   public void setEsmAddress(String var1) {
      this.esmAddress = var1;
   }

   @Transient
   public long getUptime() {
      return this.uptime;
   }

   public void setUptime(long var1) {
      this.uptime = var1;
   }

   @Column(name = "uptime", nullable = false)
   public long getBootTime() {
      return this.boottime;
   }

   public void setBootTime(long var1) {
      this.boottime = var1;
      if (this.uptime == 0L) {
         this.uptime = System.currentTimeMillis() - this.boottime;
      }
   }

   @Column(name = "avgload", nullable = false)
   public double getAvgLoad() {
      return this.avgLoad;
   }

   public void setAvgLoad(double var1) {
      this.avgLoad = var1;
   }

   @Column(name = "statustimestamp", nullable = false)
   public long getLastUpdateTimeStamp() {
      return this.lastUpdateTimeStamp;
   }

   public void setLastUpdateTimeStamp(long var1) {
      this.lastUpdateTimeStamp = var1;
   }

   @Column(name = "multicast_address", length = 39)
   public String getMulticastAddress() {
      return this.multicastAddress;
   }

   public void setMulticastAddress(String var1) {
      this.multicastAddress = var1;
   }

   @Transient
   public String getId() {
      return this.getNodeIdentifier();
   }

   @Override
   public String toString() {
      return this.name + a + this.address + "]";
   }

   @Override
   public boolean equals(Object var1) {
      if (this == var1) {
         return true;
      }

      if (var1 != null && this.getClass() == var1.getClass()) {
         ClusterNodeInfo var2 = (ClusterNodeInfo)var1;
         if (this.address != null ? this.address.equals(var2.address) : var2.address == null) {
            if (this.mac != null ? this.mac.equals(var2.mac) : var2.mac == null) {
               if (this.multicastAddress != null ? this.multicastAddress.equals(var2.multicastAddress) : var2.multicastAddress == null) {
                  if (this.name != null ? this.name.equals(var2.name) : var2.name == null) {
                     return this.nodeId != null ? this.nodeId.equals(var2.nodeId) : var2.nodeId == null;
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      } else {
         return false;
      }
   }

   @Override
   public int hashCode() {
      int var1 = this.nodeId != null ? this.nodeId.hashCode() : 0;
      var1 = 31 * var1 + (this.name != null ? this.name.hashCode() : 0);
      var1 = 31 * var1 + (this.mac != null ? this.mac.hashCode() : 0);
      var1 = 31 * var1 + (this.address != null ? this.address.hashCode() : 0);
      var1 = 31 * var1 + (this.esmAddress != null ? this.esmAddress.hashCode() : 0);
      return 31 * var1 + (this.multicastAddress != null ? this.multicastAddress.hashCode() : 0);
   }

   public int compareTo(ClusterNodeInfo var1) {
      String var3 = this.getName();
      String var4 = var1.getName();
      int var2;
      if (var3 == null && var4 == null) {
         var2 = 0;
      } else if (var3 == null) {
         var2 = -1;
      } else if (var4 == null) {
         var2 = 1;
      } else {
         var2 = var3.toLowerCase().compareTo(var4.toLowerCase());
      }

      return var2;
   }

   static {
      String var10002 = a(51, a(">e"));
      byte var10001 = -1;
      a = var10002;
   }

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

      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 -> 45;
            case 1 -> 13;
            case 2 -> 120;
            case 3 -> 26;
            case 4 -> 56;
            case 5 -> 1;
            default -> 73;
         });
      }

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