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

import com.airlock.iam.base.api.domain.model.store.query.DateField;
import com.airlock.iam.base.api.domain.model.store.query.Restriction;
import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import com.airlock.iam.common.application.query.FilterData;
import com.airlock.iam.common.domain.model.time.Period;
import com.google.common.base.Strings;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Date;
import java.util.Optional;

public class DatePeriodRestrictionProvider implements QueryFilterRestrictionProvider {
   private String property;
   private DateField<PersistentUser> field;

   @Override
   public Optional<Restriction> getRestriction(FilterData data) {
      String value = data.getCondition().getValue();
      if (Strings.isNullOrEmpty(value)) {
         return Optional.empty();
      }

      Optional<Period> period = Period.fromValue(value);
      return !period.isPresent() ? Optional.empty() : Optional.of(this.field.after(period.get().getBeginDate(new Date())));
   }

   @SuppressFBWarnings(justification = "generated code")
   public DatePeriodRestrictionProvider(String property, DateField<PersistentUser> field) {
      this.property = property;
      this.field = field;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String getProperty() {
      return this.property;
   }
}
