package com.airlock.iam.ssi.domain.model.predicate;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.misc.time.TimeProvider;
import com.airlock.iam.ssi.application.configuration.AgePredicateConfig;
import com.airlock.iam.ssi.domain.model.step.SsiPredicateSettings;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

@LogicForConfig(AgePredicateConfig.class)
public class SsiAgePredicateSettingsProvider implements SsiPredicateSettingsProvider {
   private final Provider<AgePredicateConfig> agePredicate;
   private final Provider<TimeProvider> clock;

   @Inject
   public SsiAgePredicateSettingsProvider(Provider<AgePredicateConfig> agePredicate, Provider<TimeProvider> clock) {
      this.agePredicate = agePredicate;
      this.clock = clock;
   }

   @Override
   public SsiPredicateSettings getPredicateSettings() {
      return new SsiPredicateSettings(
         ((AgePredicateConfig)this.agePredicate.get()).getName(),
         ((AgePredicateConfig)this.agePredicate.get()).getProviderKey(),
         ((AgePredicateConfig)this.agePredicate.get()).getType().flipped(),
         Integer.parseInt(
            LocalDate.ofInstant(((TimeProvider)this.clock.get()).getCurrentInstant(), ZoneId.systemDefault())
               .minusYears(((AgePredicateConfig)this.agePredicate.get()).getAgeThreshold().intValue())
               .format(DateTimeFormatter.ofPattern("yyyyMMdd"))
         )
      );
   }
}
