package com.airlock.iam.flow.shared.domain.model.item;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.domain.model.validation.Validator;
import com.airlock.iam.base.misc.date.Dates;
import com.airlock.iam.flow.shared.api.domain.model.item.info.UserDataItemInfo;
import com.airlock.iam.flow.shared.api.domain.model.item.info.UserDataItemInfoFactory;
import com.airlock.iam.flow.shared.application.configuration.item.DateContextDataItemDefinitionConfig;
import jakarta.annotation.Nonnull;
import jakarta.inject.Inject;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

@LogicForConfig(DateContextDataItemDefinitionConfig.class)
public class DateContextDataItemDefinition extends ContextDataItemDefinitionBase<LocalDate> {
   @Inject
   public DateContextDataItemDefinition(DateContextDataItemDefinitionConfig config, List<Validator<LocalDate>> validators) {
      super(config, validators);
   }

   @Override
   protected Optional<LocalDate> convertInternal(@Nonnull Object value) {
      return value instanceof String && Dates.isValidLocalDate((String)value) ? Optional.of(Dates.toLocalDate((String)value)) : Optional.empty();
   }

   @Override
   public UserDataItemInfo<LocalDate> getItemInfo(Optional<LocalDate> currentValue) {
      return UserDataItemInfoFactory.createDateUserDataItemInfo(
         this.getFieldName(), currentValue, this.isRequired(), this.getAllValidationInfos(), this.getInputPurpose()
      );
   }
}
