package com.airlock.iam.admin.infrastructure.service.ume;

import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class UserManagementExtensionService {
   private final Provider<UserManagementExtensionLayoutLoader> layoutLoader;
   private final Provider<UserManagementExtensionClasspathLoader> classpathLoader;

   @Inject
   public UserManagementExtensionService(
      Provider<UserManagementExtensionLayoutLoader> layoutLoader, Provider<UserManagementExtensionClasspathLoader> classpathLoader
   ) {
      this.layoutLoader = layoutLoader;
      this.classpathLoader = classpathLoader;
   }

   public Optional<UserManagementExtensionResourceContent> getUserManagementExtension() {
      Optional<UserManagementExtensionResourceContent> fromLayout = ((UserManagementExtensionLayoutLoader)this.layoutLoader.get())
         .loadUserManagementExtensions();
      Optional<UserManagementExtensionResourceContent> fromCache = ((UserManagementExtensionClasspathLoader)this.classpathLoader.get())
         .loadUserManagementExtensions();
      String concatenatedUmes = Stream.of(fromLayout, fromCache)
         .flatMap(Optional::stream)
         .map(UserManagementExtensionResourceContent::content)
         .collect(Collectors.joining("\n"));
      return concatenatedUmes.isBlank() ? Optional.empty() : Optional.of(new UserManagementExtensionResourceContent(concatenatedUmes));
   }
}
