package com.l7tech.identity.internal;

import com.l7tech.identity.GroupMembership;
import com.l7tech.identity.IdentityProviderConfigManager;
import com.l7tech.objectmodel.Goid;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import jakarta.persistence.Version;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

@Entity
@Proxy(lazy = false)
@Table(name = "internal_user_group")
public class InternalGroupMembership extends GroupMembership {
   private Goid _goid;
   private int _version;
   private Goid thisGroupGoid;
   private Goid memberProviderGoid;
   private String memberSubgroupId;
   static final long serialVersionUID = -3328764341546164041L;

   protected InternalGroupMembership() {
      super.thisGroupProviderGoid = IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID;
   }

   @Id
   @Column(name = "goid", nullable = false, updatable = false)
   @GenericGenerator(name = "layer7-goid-generator", strategy = "com.l7tech.server.util.ConfiguredSessionFactoryBean$ConfiguredGOIDGenerator")
   @GeneratedValue(generator = "layer7-goid-generator")
   @Type(type = "com.l7tech.server.util.GoidType")
   public Goid getGoid() {
      return this._goid;
   }

   @Transient
   public String getId() {
      return Goid.toString(this._goid);
   }

   public void setGoid(Goid var1) {
      this._goid = var1;
   }

   @Column(name = "user_goid")
   @Type(type = "com.l7tech.server.util.GoidType")
   @Override
   public Goid getMemberUserId() {
      return super.getMemberUserId();
   }

   @Column(name = "internal_group")
   @Type(type = "com.l7tech.server.util.GoidType")
   @Override
   public Goid getThisGroupId() {
      return this.thisGroupGoid;
   }

   @Override
   public void setThisGroupId(Goid var1) {
      this.thisGroupGoid = var1;
   }

   @Column(name = "provider_goid", nullable = false)
   @Type(type = "com.l7tech.server.util.GoidType")
   public Goid getMemberProviderGoid() {
      return this.memberProviderGoid;
   }

   public void setMemberProviderGoid(Goid var1) {
      this.memberProviderGoid = var1;
   }

   public static InternalGroupMembership newInternalMembership(Goid var0, Goid var1) {
      InternalGroupMembership var2 = new InternalGroupMembership();
      var2.thisGroupGoid = var0;
      var2.thisGroupProviderGoid = IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID;
      var2.memberUserId = var1;
      var2.memberProviderGoid = IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID;
      return var2;
   }

   public static InternalGroupMembership newMetaUserMembership(Goid var0, Goid var1, Goid var2) {
      InternalGroupMembership var3 = new InternalGroupMembership();
      var3.thisGroupGoid = var0;
      var3.thisGroupProviderGoid = IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID;
      var3.memberProviderGoid = var1;
      var3.memberUserId = var2;
      var3.memberSubgroupId = null;
      return var3;
   }

   @Column(name = "subgroup_id", length = 255)
   public String getMemberSubgroupId() {
      return this.memberSubgroupId;
   }

   public void setMemberSubgroupId(String var1) {
      this.memberSubgroupId = var1;
   }

   @Version
   @Column(name = "version")
   public int getVersion() {
      return this._version;
   }

   public void setVersion(int var1) {
      this._version = var1;
   }

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

      if (var1 == null || this.getClass() != var1.getClass()) {
         return false;
      }

      if (!super.equals(var1)) {
         return false;
      }

      InternalGroupMembership var2 = (InternalGroupMembership)var1;
      if (this.memberProviderGoid != null ? this.memberProviderGoid.equals(var2.memberProviderGoid) : var2.memberProviderGoid == null) {
         if (this.thisGroupGoid != null ? this.thisGroupGoid.equals(var2.thisGroupGoid) : var2.thisGroupGoid == null) {
            return this.memberSubgroupId != null ? this.memberSubgroupId.equals(var2.memberSubgroupId) : var2.memberSubgroupId == null;
         } else {
            return false;
         }
      } else {
         return false;
      }
   }

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