package com.airlock.iam.oauth2.domain.service.client.resource;

import com.airlock.iam.common.api.domain.model.user.ProvidedUsername;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;

public final class OAuth2RemoteUsernameResourceLogic implements OAuth2RemoteResource {
   private static final ELogger LOG = ELoggerFactory.getLogger(OAuth2RemoteUsernameResourceLogic.class);
   private final OAuth2ResourceSelector resourceSelector;

   @Override
   public OAuth2SingleResourceData collectResource(Map<String, Object> parsedResourceResponse) {
      Optional<String> username = this.resourceSelector.retrieveResource(parsedResourceResponse, String.class);
      if (username.isPresent() && StringUtils.isNotBlank(username.get())) {
         return DefaultOAuth2SingleResourceData.resourceDataWithUsername(ProvidedUsername.providedUsernameOf(username.get()));
      }

      LOG.info("Unable not extract the username from the parsed resource response.");
      return FailedOAuth2SingleResourceData.failedResourceData();
   }

   @SuppressFBWarnings(justification = "generated code")
   public OAuth2RemoteUsernameResourceLogic(OAuth2ResourceSelector resourceSelector) {
      this.resourceSelector = resourceSelector;
   }
}
