package com.l7tech.objectmodel;

import com.l7tech.util.DeserializeSafe;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

@XmlJavaTypeAdapter(EntityHeaderSetType.EntityHeaderSetTypeAdapter.class)
@DeserializeSafe
public class EntityHeaderSet<HT extends EntityHeader> implements Set<HT>, Serializable {
   private volatile Long exceededMax;
   private final Set<HT> delegate;
   private static final long serialVersionUID = 1L;

   public static <HT_ extends EntityHeader> EntityHeaderSet<HT_> empty() {
      return new EntityHeaderSet<>(Collections.emptySet());
   }

   public EntityHeaderSet(HT... var1) {
      HashSet var2 = new HashSet();
      var2.addAll(Arrays.asList(var1));
      this.delegate = var2;
   }

   public EntityHeaderSet() {
      this.delegate = new HashSet<>();
   }

   public EntityHeaderSet(Set<HT> var1) {
      if (var1 instanceof EntityHeaderSet var2) {
         if (var2.isMaxExceeded()) {
            this.setMaxExceeded(var2.getExceededMax());
         }

         this.delegate = var2.delegate;
      } else {
         this.delegate = var1;
      }
   }

   public boolean isMaxExceeded() {
      return this.exceededMax != null;
   }

   public Long getExceededMax() {
      return this.exceededMax;
   }

   public void setMaxExceeded(long var1) {
      this.exceededMax = var1;
   }

   @Override
   public int size() {
      return this.delegate.size();
   }

   @Override
   public boolean isEmpty() {
      return this.delegate.isEmpty();
   }

   @Override
   public boolean contains(Object var1) {
      return this.delegate.contains(var1);
   }

   @Override
   public Iterator<HT> iterator() {
      return this.delegate.iterator();
   }

   @Override
   public Object[] toArray() {
      return this.delegate.toArray();
   }

   @Override
   public <T> T[] toArray(T[] var1) {
      return (T[])this.delegate.toArray(var1);
   }

   public boolean add(HT var1) {
      return this.delegate.add((HT)var1);
   }

   @Override
   public boolean remove(Object var1) {
      return this.delegate.remove(var1);
   }

   @Override
   public boolean containsAll(Collection<?> var1) {
      return this.delegate.containsAll(var1);
   }

   @Override
   public boolean addAll(Collection<? extends HT> var1) {
      return this.delegate.addAll(var1);
   }

   @Override
   public boolean retainAll(Collection<?> var1) {
      return this.delegate.retainAll(var1);
   }

   @Override
   public boolean removeAll(Collection<?> var1) {
      return this.delegate.removeAll(var1);
   }

   @Override
   public void clear() {
      this.delegate.clear();
   }

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

      if (var1 != null && this.getClass() == var1.getClass()) {
         EntityHeaderSet var2 = (EntityHeaderSet)var1;
         if (this.delegate != null ? this.delegate.equals(var2.delegate) : var2.delegate == null) {
            return this.exceededMax != null ? this.exceededMax.equals(var2.exceededMax) : var2.exceededMax == null;
         } else {
            return false;
         }
      } else {
         return false;
      }
   }

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