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

import com.airlock.iam.authentication.application.configuration.ui.NonFlowAuthenticationUiConfig;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.flow.api.application.configuration.MaintenanceMessageUiSettings;
import com.airlock.iam.flow.ui.infrastructure.service.ui.GlobalUiAttributes;
import com.airlock.iam.flow.ui.infrastructure.service.ui.MaintenanceMessageUiSettingsFactory;
import com.airlock.iam.flow.ui.infrastructure.settings.NonFlowUiSettings;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Map;
import java.util.Optional;

@LogicForConfig(NonFlowAuthenticationUiConfig.class)
public final class NonFlowUiSettingsService {
   private final NonFlowAuthenticationUiConfig config;
   private final Provider<GlobalUiAttributes> globalUiAttributes;

   @Inject
   public NonFlowUiSettingsService(NonFlowAuthenticationUiConfig config, Provider<GlobalUiAttributes> globalUiAttributes) {
      this.config = config;
      this.globalUiAttributes = globalUiAttributes;
   }

   public NonFlowUiSettings toSettings() {
      Optional<MaintenanceMessageUiSettings> maintenanceMessageUiSettings = this.config.getMaintenanceMessageUi();
      Map<String, Object> pageSettings = maintenanceMessageUiSettings.<Map<String, Object>>map(MaintenanceMessageUiSettingsFactory::toUiSettings)
         .orElse(Map.of());
      return NonFlowUiSettings.builder().pageSettings(pageSettings).uiTenantId(((GlobalUiAttributes)this.globalUiAttributes.get()).uiTenantId()).build();
   }
}
