package com.airlock.iam.oauth2.application.service;

import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import com.airlock.iam.common.api.domain.model.user.User;
import com.airlock.iam.common.application.service.user.UserToPropagatedNameTransformationManager;
import com.airlock.iam.common.domain.model.user.UserFactoryImpl;
import com.airlock.iam.common.infrastructure.contextdata.ContextDataFactoryImpl;
import com.airlock.iam.core.domain.model.user.UserToPropagatedNameTransformer;
import com.airlock.iam.oauth2.api.application.configuration.claims.OAuth2UsernameTransformer;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;

public class OAuth2PersistentUserToUsernameTransformer implements OAuth2UsernameTransformer {
   private final List<UserToPropagatedNameTransformer> transformers;

   public String apply(PersistentUser persistentUser) {
      UserToPropagatedNameTransformationManager transformationManager = new UserToPropagatedNameTransformationManager(this.transformers);
      User user = new UserFactoryImpl(new ContextDataFactoryImpl()).createUser(persistentUser);
      return transformationManager.transformUsername(user);
   }

   @SuppressFBWarnings(justification = "generated code")
   public OAuth2PersistentUserToUsernameTransformer(List<UserToPropagatedNameTransformer> transformers) {
      this.transformers = transformers;
   }
}
