package com.airlock.iam.admin.domain.model.realm;

import com.airlock.iam.admin.api.domain.model.administrator.CurrentAdministrator;
import com.airlock.iam.admin.application.configuration.realm.RealmValueProviderConfig;
import com.airlock.iam.admin.domain.model.contextdata.AdminRealmContextDataName;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import jakarta.inject.Inject;
import java.util.Optional;

@LogicForConfig(RealmValueProviderConfig.class)
public final class RealmValueProvider implements ValueProvider<String> {
   private final CurrentAdministrator admin;
   private final RealmValueProviderConfig config;
   private final Optional<AdminRealmContextDataName> adminRealmContextDataName;

   @Inject
   public RealmValueProvider(CurrentAdministrator admin, RealmValueProviderConfig config, Optional<AdminRealmContextDataName> adminRealmContextDataName) {
      this.admin = admin;
      this.config = config;
      this.adminRealmContextDataName = adminRealmContextDataName;
   }

   public String getValue() {
      return this.adminRealmContextDataName
         .<String>flatMap(name -> name.getValidatedValue(this.admin))
         .map(realm -> this.config.getValue().replace("@realm@", realm))
         .orElse("");
   }
}
