package com.l7tech.server;

import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.server.util.ReadOnlyHibernateCallback;
import com.l7tech.util.Functions.BinaryThrows;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Order;
import jakarta.persistence.criteria.Path;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;

class bw extends ReadOnlyHibernateCallback<List<ET>> {
   final Class val$clazz;
   final BinaryThrows val$predicateCustomizer;
   final String val$sortProperty;
   final boolean val$ascending;
   final int val$offset;
   final int val$count;
   final HibernateEntityManager this$0;

   bw(HibernateEntityManager var1, Class var2, BinaryThrows var3, String var4, boolean var5, int var6, int var7) {
      this.this$0 = var1;
      this.val$clazz = var2;
      this.val$predicateCustomizer = var3;
      this.val$sortProperty = var4;
      this.val$ascending = var5;
      this.val$offset = var6;
      this.val$count = var7;
   }

   protected List<ET> doInHibernateReadOnly(Session var1) throws HibernateException, SQLException {
      CriteriaBuilder var2 = var1.getCriteriaBuilder();

      CriteriaBuilder var10000;
      Class var10001;
      label62: {
         try {
            var10000 = var2;
            if (this.val$clazz == null) {
               var10001 = this.this$0.getImpClass();
               break label62;
            }
         } catch (FindException var14) {
            throw a(var14);
         }

         var10001 = this.val$clazz;
      }

      CriteriaQuery var3 = var10000.createQuery(var10001);

      label54: {
         try {
            var16 = var3;
            if (this.val$clazz == null) {
               var10001 = this.this$0.getImpClass();
               break label54;
            }
         } catch (FindException var13) {
            throw a(var13);
         }

         var10001 = this.val$clazz;
      }

      Root var4 = var16.from(var10001);
      Predicate var5 = this.this$0.addFindAllPredicate(var2.conjunction(), var2, var4);

      try {
         var5 = var2.and(var5, (Expression)this.val$predicateCustomizer.call(var2, var4));
      } catch (FindException var11) {
         throw new HibernateException(var11);
      }

      Path var6 = HibernateEntityManager.expandNestedAttribute(var4, this.val$sortProperty, true);

      label46: {
         try {
            if (this.val$ascending) {
               var3.select(var4).where(var5).orderBy(new Order[]{var2.asc(var6)});
               break label46;
            }
         } catch (FindException var12) {
            throw a(var12);
         }

         var3.select(var4).where(var5).orderBy(new Order[]{var2.desc(var6)});
      }

      Query var7 = var1.createQuery(var3);
      var7.setFirstResult(this.val$offset);
      var7.setMaxResults(this.val$count);
      List var8 = var7.getResultList();

      for (PersistentEntity var10 : var8) {
         this.this$0.initializeLazilyLoaded(var10);
      }

      return var8;
   }

   private static FindException a(FindException var0) {
      return var0;
   }
}
