package com.airlock.iam.common.application.query;

import ch.ergon.restal.jsonapi.parameter.PageParameter;
import com.airlock.iam.base.api.domain.model.store.query.Orderable;
import com.airlock.iam.base.api.domain.model.store.query.Result;
import com.airlock.iam.common.api.domain.model.store.user.schema.UserSchema;
import com.airlock.iam.common.api.domain.model.user.PersistentUser;

public class QueryPager {
   private final UserSchema schema;
   private PageParameter page = PageParameter.withOffsetAndLimit(0, 0);

   public QueryPager(UserSchema schema) {
      this.schema = schema;
   }

   public void setPageParameter(PageParameter pageParameter) {
      this.page = pageParameter;
   }

   public Result<String> selectUserIdsInRange(Orderable<PersistentUser> query) {
      return query.select(this.schema.identity().selector()).range(this.page.getOffset(), this.page.getOffset() + this.page.getLimit());
   }

   public Result<PersistentUser> selectUsersInRange(Orderable<PersistentUser> query) {
      return query.range(this.page.getOffset(), this.page.getOffset() + this.page.getLimit());
   }
}
