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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.encoder.StringEncoder;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.flow.shared.api.domain.model.valueprovider.ValueMapProvider;
import com.airlock.iam.flow.shared.application.configuration.valueprovider.TemplateStringValueProviderConfig;
import com.airlock.iam.flow.shared.domain.model.template.TemplateString;
import jakarta.annotation.Nullable;
import jakarta.inject.Inject;
import java.util.List;

@LogicForConfig(TemplateStringValueProviderConfig.class)
public final class TemplateStringValueProvider implements ValueProvider<String> {
   private final ValueMapProvider valuesProvider;
   private final List<StringEncoder> encoders;
   private final String template;

   @Inject
   public TemplateStringValueProvider(ValueMapProvider valuesProvider, List<StringEncoder> encoders, String template) {
      this.valuesProvider = valuesProvider;
      this.encoders = encoders;
      this.template = template;
   }

   @Nullable
   public String getValue() {
      return new TemplateString(this.template, this.valuesProvider, this.encoders).getValue();
   }
}
