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

import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.elog.api.LogTypes;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.servlet.ServletContext;
import jakarta.ws.rs.core.UriBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Optional;

@SuppressFBWarnings({"NP_LOAD_OF_KNOWN_NULL_VALUE", "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"})
public class UserManagementExtensionLayoutLoader {
   private static final ELogger LOG = ELoggerFactory.getLogger(UserManagementExtensionLayoutLoader.class);
   private final Provider<ServletContext> servletContext;

   @Inject
   public UserManagementExtensionLayoutLoader(Provider<ServletContext> servletContext) {
      this.servletContext = servletContext;
   }

   public Optional<UserManagementExtensionResourceContent> loadUserManagementExtensions() {
      String path = UriBuilder.fromPath("/").path("user-management-extensions.js").build(new Object[0]).getPath();

      try (InputStream inputStream = ((ServletContext)this.servletContext.get()).getResourceAsStream(path)) {
         if (inputStream != null) {
            String content = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
            return Optional.of(new UserManagementExtensionResourceContent(content));
         }

         LOG.error(LogTypes.RESOURCE_NOT_FOUND, "Failed to load JavaScript resource from Classpath: No resource found in path");
      } catch (IOException e) {
         LOG.error(LogTypes.RESOURCE_NOT_FOUND, "Failed to load JavaScript resource from layout directory" + path, e);
      }

      return Optional.empty();
   }
}
