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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.flow.ui.application.configuration.ShowLogoutDisclaimerPageConfig;
import com.airlock.iam.flow.ui.infrastructure.service.OnLogout;
import com.airlock.iam.flow.ui.infrastructure.service.RedirectTarget;
import com.airlock.iam.flow.ui.infrastructure.service.OnLogout.OnLogoutType;
import com.airlock.iam.flow.ui.infrastructure.service.ui.GlobalUiAttributes;
import jakarta.inject.Inject;
import java.util.Optional;

@LogicForConfig(ShowLogoutDisclaimerPageConfig.class)
public final class ShowLogoutDisclaimerPage implements OnLogout, RedirectTarget {
   private final ShowLogoutDisclaimerPageConfig config;
   private final PluginConfigToLogic configToLogic;
   private final LogoutDisclaimerSkipService logoutDisclaimerSkipService;
   private final GlobalUiAttributes globalUiAttributes;

   @Inject
   public ShowLogoutDisclaimerPage(
      ShowLogoutDisclaimerPageConfig config,
      PluginConfigToLogic configToLogic,
      LogoutDisclaimerSkipService logoutDisclaimerSkipService,
      GlobalUiAttributes globalUiAttributes
   ) {
      this.config = config;
      this.configToLogic = configToLogic;
      this.logoutDisclaimerSkipService = logoutDisclaimerSkipService;
      this.globalUiAttributes = globalUiAttributes;
   }

   public OnLogoutType getType() {
      return this.skipDisclaimer() ? OnLogoutType.REDIRECT : OnLogoutType.SHOW_LOGOUT_CONFIRMATION;
   }

   public String getTarget() {
      return this.configToLogic.<RedirectTarget>getLogic(this.config.getTargetOnContinue()).getTarget();
   }

   public Optional<String> getUiTenantId() {
      return this.globalUiAttributes.uiTenantId();
   }

   private boolean skipDisclaimer() {
      return this.logoutDisclaimerSkipService.skipDisclaimer();
   }
}
