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

@LogicForConfig(StringContextDataItemDefinitionConfig.class)
public final class StringContextDataItemDefinition extends ContextDataItemDefinitionBase<String> {
   @Inject
   public StringContextDataItemDefinition(StringContextDataItemDefinitionConfig config, List<Validator<String>> validators) {
      super(config, validators);
   }

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

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