package com.l7tech.gateway.common.cluster;

import com.l7tech.gateway.common.service.ServiceStatistics;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.NameableEntity;
import com.l7tech.util.DeserializeSafe;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import java.io.Serializable;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

@Entity
@Proxy(lazy = false)
@Table(name = "service_usage")
@IdClass(ServiceUsage.ServiceUsagePK.class)
@DeserializeSafe
public class ServiceUsage implements NameableEntity, Serializable {
   public static final String ATTR_SERVICE_GOID;
   private static final long serialVersionUID = 7989882004981151855L;
   private Goid serviceid;
   private String nodeid;
   private String name;
   private long requests;
   private long authorized;
   private long completed;

   public static ServiceUsage fromStat(ServiceStatistics var0, String var1) {
      ServiceUsage var2 = new ServiceUsage();
      var2.setServiceid(var0.getServiceGoid());
      var2.setNodeid(var1);
      var2.setAuthorized(var0.getAuthorizedRequestCount());
      var2.setCompleted(var0.getCompletedRequestCount());
      var2.setRequests(var0.getAttemptedRequestCount());
      return var2;
   }

   @Id
   @Column(name = "serviceid")
   @Type(type = "com.l7tech.server.util.GoidType")
   public Goid getServiceid() {
      return this.serviceid;
   }

   public void setServiceid(Goid var1) {
      this.serviceid = var1;
   }

   @Id
   @Column(name = "nodeid")
   public String getNodeid() {
      return this.nodeid;
   }

   public void setNodeid(String var1) {
      this.nodeid = var1;
   }

   @Column(name = "requestnr")
   public long getRequests() {
      return this.requests;
   }

   public void setRequests(long var1) {
      this.requests = var1;
   }

   @Column(name = "authorizedreqnr")
   public long getAuthorized() {
      return this.authorized;
   }

   public void setAuthorized(long var1) {
      this.authorized = var1;
   }

   @Column(name = "completedreqnr")
   public long getCompleted() {
      return this.completed;
   }

   public void setCompleted(long var1) {
      this.completed = var1;
   }

   @Transient
   public String getName() {
      return this.name;
   }

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

   @Transient
   public String getId() {
      return this.nodeid + ":" + this.serviceid;
   }

   @Override
   public boolean equals(Object var1) {
      if (!(var1 instanceof ServiceUsage var2)) {
         return false;
      } else {
         return !Goid.equals(this.serviceid, var2.serviceid) ? false : this.nodeid.equals(var2.nodeid);
      }
   }

   @Override
   public int hashCode() {
      int var1 = super.hashCode();
      var1 = 31 * var1 + (this.serviceid != null ? this.serviceid.hashCode() : 0);
      return 31 * var1 + (this.nodeid != null ? this.nodeid.hashCode() : 0);
   }

   static {
      String var10002 = a(78, a("'C{+\u000f)(=B"));
      byte var10001 = -1;
      ATTR_SERVICE_GOID = var10002;
   }

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

      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 -> 26;
            case 1 -> 104;
            case 2 -> 71;
            case 3 -> 19;
            case 4 -> 40;
            case 5 -> 4;
            default -> 3;
         });
      }

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

   public static class ServiceUsagePK implements Serializable {
      private Goid serviceid;
      private String nodeid;
      static final long serialVersionUID = 3330680037561524643L;

      public ServiceUsagePK() {
      }

      public ServiceUsagePK(Goid var1, String var2) {
         this.serviceid = var1;
         this.nodeid = var2;
      }

      public Goid getServiceid() {
         return this.serviceid;
      }

      public void setServiceid(Goid var1) {
         this.serviceid = var1;
      }

      public String getNodeid() {
         return this.nodeid;
      }

      public void setNodeid(String var1) {
         this.nodeid = var1;
      }

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

         if (var1 != null && this.getClass() == var1.getClass()) {
            ServiceUsage.ServiceUsagePK var2 = (ServiceUsage.ServiceUsagePK)var1;
            if (this.nodeid != null ? this.nodeid.equals(var2.nodeid) : var2.nodeid == null) {
               return this.serviceid != null ? this.serviceid.equals(var2.serviceid) : var2.serviceid == null;
            } else {
               return false;
            }
         } else {
            return false;
         }
      }

      @Override
      public int hashCode() {
         int var1 = this.serviceid != null ? this.serviceid.hashCode() : 0;
         return 31 * var1 + (this.nodeid != null ? this.nodeid.hashCode() : 0);
      }
   }
}
