package com.airlock.iam.login.app.misc;

import com.airlock.iam.core.misc.cronto.CrontoHandler;
import com.airlock.iam.core.misc.util.config.Config;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.login.app.misc.configuration.Loginapp;
import com.airlock.iam.login.app.misc.util.ServletConfigUtils;
import com.airlock.iam.plugin.api.config.ConfigurationContext;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Optional;

public abstract class CrontoAppCommunicationServlet extends ExceptionWrapperServlet {
   private static final ELogger LOG = ELoggerFactory.getLogger(CrontoAppCommunicationServlet.class);

   @Override
   protected void handleRequest(HttpServletRequest request, HttpServletResponse response, ConfigurationContext context) {
      try {
         this.handleCrontoRequest(request, response, context, crontoHandler(context));
      } catch (Exception e) {
         LOG.warn(LogTypes.SERVLET_EXCEPTION_HANDLER, "Exception during Cronto app request", e);
         response.setStatus(500);
      }
   }

   protected static String getTranslatedErrorMessage(HttpServletRequest request, ConfigurationContext context, String resourceKey) {
      return Config.getLanguageDependentResource("strings", ServletConfigUtils.determineDisplayLanguage(request, context).getLanguage(), resourceKey);
   }

   private static Optional<CrontoHandler> crontoHandler(ConfigurationContext context) {
      return Loginapp.get(context).getCrontoAppCommunication();
   }

   protected abstract void handleCrontoRequest(HttpServletRequest var1, HttpServletResponse var2, ConfigurationContext var3, Optional<CrontoHandler> var4) throws IOException;
}
