package com.airlock.iam.oauth2.domain.model.accountregistration;

import com.airlock.iam.common.api.domain.model.store.user.UserStore;
import com.airlock.iam.core.domain.model.user.UserIdentityGenerator;
import com.airlock.iam.login.api.domain.model.oauth2.OAuth2Credential;
import com.airlock.iam.login.api.domain.model.oauth2.accountregistration.AccountRegistrationUsername;
import com.airlock.iam.login.api.domain.model.oauth2.accountregistration.AccountRegistrationUsernameProvider;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.HashMap;
import java.util.Map;

public final class GeneratedUsernameProvider implements AccountRegistrationUsernameProvider {
   private final UserIdentityGenerator usernameGenerator;

   @Override
   public AccountRegistrationUsername provide(OAuth2Credential credential, UserStore userStore) {
      Map<String, Object> attributes = new HashMap<>();

      for (String attributeKey : credential.getAttributeKeys()) {
         attributes.put(attributeKey, credential.getAttributeValue(attributeKey));
      }

      return new AccountRegistrationUsername(this.usernameGenerator.generateIdentity(userStore, attributes));
   }

   @SuppressFBWarnings(justification = "generated code")
   public GeneratedUsernameProvider(UserIdentityGenerator usernameGenerator) {
      this.usernameGenerator = usernameGenerator;
   }
}
