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

import com.airlock.iam.common.api.domain.model.store.user.schema.UserSchema;
import com.google.common.collect.Lists;
import java.text.DateFormat;
import java.util.LinkedList;
import java.util.List;

public final class DateRestrictions {
   private DateRestrictions() {
   }

   public static List<QueryFilterRestrictionProvider> latestSuccessfulLoginPeriod(UserSchema schema) {
      return Lists.newArrayList(
         new QueryFilterRestrictionProvider[]{new DatePeriodRestrictionProvider("last-successful-login", schema.statistics().latestSuccessfulLogin())}
      );
   }

   public static List<QueryFilterRestrictionProvider> latestSuccessfulLoginRange(UserSchema schema, DateFormat format) {
      List<QueryFilterRestrictionProvider> ranges = new LinkedList<>();
      ranges.add(new DateRangeRestrictionProvider("last-successful-login", schema.statistics().latestSuccessfulLogin(), format, true));
      ranges.add(new DateRangeRestrictionProvider("last-successful-login", schema.statistics().latestSuccessfulLogin(), format, false));
      return ranges;
   }

   public static List<QueryFilterRestrictionProvider> latestLoginAttemptPeriod(UserSchema schema) {
      return Lists.newArrayList(
         new QueryFilterRestrictionProvider[]{new DatePeriodRestrictionProvider("last-login-attempt", schema.statistics().latestLoginAttempt())}
      );
   }

   public static List<QueryFilterRestrictionProvider> latestLoginAttemptRange(UserSchema schema, DateFormat format) {
      List<QueryFilterRestrictionProvider> ranges = new LinkedList<>();
      ranges.add(new DateRangeRestrictionProvider("last-login-attempt", schema.statistics().latestLoginAttempt(), format, true));
      ranges.add(new DateRangeRestrictionProvider("last-login-attempt", schema.statistics().latestLoginAttempt(), format, false));
      return ranges;
   }
}
