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.DateAndTimeContextDataItemDefinitionConfig;
import jakarta.annotation.Nonnull;
import jakarta.inject.Inject;
import java.util.Date;
import java.util.List;
import java.util.Optional;

@LogicForConfig(DateAndTimeContextDataItemDefinitionConfig.class)
public class DateAndTimeContextDataItemDefinition extends ContextDataItemDefinitionBase<Date> {
   @Inject
   public DateAndTimeContextDataItemDefinition(DateAndTimeContextDataItemDefinitionConfig config, List<Validator<Date>> validators) {
      super(config, validators);
   }

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

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