package com.airlock.iam.common.infrastructure.i18n;

import com.airlock.iam.base.misc.json.JsonCoding;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.elog.api.LogTypes;
import com.google.common.io.ByteSource;
import com.google.common.io.ByteStreams;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.servlet.ServletContext;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class ServletContextBasedJsonLoader implements I18nJsonLoader {
   private static final ELogger LOG = ELoggerFactory.getLogger(ServletContextBasedJsonLoader.class);
   private final ServletContext servletContext;

   @SuppressFBWarnings({"NP_LOAD_OF_KNOWN_NULL_VALUE", "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"})
   @Override
   public Map<String, Object> loadJson(String pathToJsonResource) {
      try (InputStream resource = this.servletContext.getResourceAsStream(pathToJsonResource)) {
         if (resource != null) {
            String text = ByteSource.wrap(ByteStreams.toByteArray(resource)).asCharSource(StandardCharsets.UTF_8).read();
            return JsonCoding.fromJson(text);
         }
      } catch (IOException e) {
         LOG.error(LogTypes.SERVER_INFO_SYS, "Failed to load JSON resource at " + pathToJsonResource, e);
      }

      return new HashMap<>();
   }

   @SuppressFBWarnings(justification = "generated code")
   public ServletContextBasedJsonLoader(ServletContext servletContext) {
      this.servletContext = servletContext;
   }
}
