package com.airlock.iam.ssi.infrastructure.rest;

import com.airlock.iam.common.api.domain.model.valueprovider.CachingValueProvider;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.ssi.domain.service.procivis.ProcivisDeskSsiServiceSettings;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.net.URI;
import java.util.Objects;
import java.util.Optional;

public final class ProcivisDeskRequestFactory extends AbstractProcivisRequestFactory {
   private final Provider<ProcivisDeskSsiServiceSettings> settings;
   private final Provider<ValueProvider<String>> accessTokenProvider;

   @Inject
   public ProcivisDeskRequestFactory(Provider<ProcivisDeskSsiServiceSettings> settings, Provider<ValueProvider<String>> accessTokenProvider) {
      this.settings = settings;
      this.accessTokenProvider = accessTokenProvider;
   }

   @Override
   protected URI procivisUrl() {
      return ((ProcivisDeskSsiServiceSettings)this.settings.get()).procivisUrl();
   }

   @Override
   protected Optional<String> accessToken(boolean forceRefresh) {
      return forceRefresh && this.accessTokenProvider.get() instanceof CachingValueProvider<String> cachingAccessTokenProvider
         ? Optional.of(cachingAccessTokenProvider.getValue(true))
         : Optional.of(Objects.requireNonNull((String)((ValueProvider)this.accessTokenProvider.get()).getValue()));
   }
}
