package com.airlock.iam.common.domain.model.user;

import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.time.Duration;
import java.time.Instant;

public class UserNotValidAnymorePredicate implements PersistentUserPredicate {
   private final int gracePeriod;

   @Override
   public boolean evaluate(PersistentUser user) {
      if (user.getValidTo() == null) {
         return false;
      }

      Instant validToWithGracePeriod = user.getValidTo().toInstant().plus(Duration.ofDays(this.gracePeriod));
      return Instant.now().isAfter(validToWithGracePeriod);
   }

   @SuppressFBWarnings(justification = "generated code")
   public static UserNotValidAnymorePredicate.UserNotValidAnymorePredicateBuilder builder() {
      return new UserNotValidAnymorePredicate.UserNotValidAnymorePredicateBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public UserNotValidAnymorePredicate(int gracePeriod) {
      this.gracePeriod = gracePeriod;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class UserNotValidAnymorePredicateBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private int gracePeriod;

      @SuppressFBWarnings(justification = "generated code")
      UserNotValidAnymorePredicateBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public UserNotValidAnymorePredicate.UserNotValidAnymorePredicateBuilder gracePeriod(int gracePeriod) {
         this.gracePeriod = gracePeriod;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public UserNotValidAnymorePredicate build() {
         return new UserNotValidAnymorePredicate(this.gracePeriod);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "UserNotValidAnymorePredicate.UserNotValidAnymorePredicateBuilder(gracePeriod=" + this.gracePeriod + ")";
      }
   }
}
