package com.airlock.iam.oauth2.domain.service.persistence;

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.oauth2.api.domain.model.OAuth2ClientId;
import com.airlock.iam.oauth2.domain.model.client.OAuth2Client;
import com.airlock.iam.oauth2.domain.model.client.OAuth2ClientLoader;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.Optional;

public final class OAuth2StaticClientLoader implements OAuth2ClientLoader {
   private final List<OAuth2Client> staticClients;

   @Override
   public Optional<OAuth2Client> tryLoadClient(OAuth2ClientId clientId) {
      return this.staticClients.stream().filter(c -> c.clientId().hasId(clientId.id())).findAny();
   }

   @Override
   public OAuth2Client loadClient(OAuth2ClientId clientId) {
      return this.tryLoadClient(clientId)
         .orElseThrow(() -> new FailureException("Client with clientId " + LogUtil.logSafeQuote(clientId) + " not found in static OAuth 2.0 clients"));
   }

   @SuppressFBWarnings(justification = "generated code")
   public OAuth2StaticClientLoader(List<OAuth2Client> staticClients) {
      this.staticClients = staticClients;
   }
}
