package com.airlock.iam.flow.shared.infrastructure.service.uitenantid;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.infrastructure.uri.ExternalUriInfo;
import com.airlock.iam.flow.shared.application.configuration.uitenantid.RequestUrlPatternUiTenantIdRuleConfig;
import com.airlock.iam.flow.shared.domain.model.uitenantid.UiTenantId;
import com.airlock.iam.flow.shared.domain.model.uitenantid.UiTenantIdRule;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

@LogicForConfig(RequestUrlPatternUiTenantIdRuleConfig.class)
public final class RequestUrlPatternUiTenantIdRule implements UiTenantIdRule {
   private final Provider<RequestUrlPatternUiTenantIdRuleSettings> settings;
   private final Provider<ExternalUriInfo> externalUriInfo;

   @Inject
   public RequestUrlPatternUiTenantIdRule(Provider<RequestUrlPatternUiTenantIdRuleSettings> settings, Provider<ExternalUriInfo> externalUriInfo) {
      this.settings = settings;
      this.externalUriInfo = externalUriInfo;
   }

   @Override
   public Optional<UiTenantId> getUiTenantId() {
      return ((RequestUrlPatternUiTenantIdRuleSettings)this.settings.get())
            .pattern()
            .matcher(((ExternalUriInfo)this.externalUriInfo.get()).getAbsolutePath().toASCIIString())
            .matches()
         ? Optional.of(((RequestUrlPatternUiTenantIdRuleSettings)this.settings.get()).uiTenantIdValue())
         : Optional.empty();
   }
}
