package com.airlock.iam.authentication.infrastructure.service.ui;

import com.airlock.iam.authentication.application.configuration.ui.AuthenticationUiConfig;
import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.flow.api.application.configuration.step.FlowStepConfig;
import com.airlock.iam.flow.ui.application.configuration.StepUiConfig;
import com.airlock.iam.flow.ui.infrastructure.service.PublicSelfServiceLink;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Map;
import java.util.Optional;

public final class SelfUnlockFlowPageSettingsAttributeProvider implements AuthenticationPageSettingsAttributesProvider {
   private static final String SELF_UNLOCK_FLOW_LINK = "selfUnlockFlowLink";
   private final Provider<AuthenticationUiConfig> uiConfig;
   private final PluginConfigToLogic toLogic;

   @Inject
   public SelfUnlockFlowPageSettingsAttributeProvider(Provider<AuthenticationUiConfig> uiConfig, PluginConfigToLogic toLogic) {
      this.uiConfig = uiConfig;
      this.toLogic = toLogic;
   }

   public Map<String, Object> getPageSettingsAttributes(FlowStepConfig stepConfig, Optional<StepUiConfig> stepUiConfig) {
      return ((AuthenticationUiConfig)this.uiConfig.get())
         .getSelfUnlockFlow()
         .map(this.toLogic::getLogic)
         .map(PublicSelfServiceLink.class::cast)
         .map(link -> Map.of("selfUnlockFlowLink", link.getLinkUrl()))
         .orElse(Map.of());
   }
}
