package com.guidewire.pl.system.servlet;

import com.guidewire.pl.system.servlet.InfoServlet.ProxyFor__1657597001241081148;
import com.guidewire.pl.system.servlet.InfoServlet.block_1_;
import gw.api.system.server.GWProduct;
import gw.api.system.server.ServerModeUtil;
import gw.api.system.server.ServerUtil;
import gw.api.webservice.systemTools.ServerVersion;
import gw.lang.reflect.gs.IGosuClassObject;
import gw.util.GWBaseDateCoreEnhancement;
import gw.util.StreamUtil;
import java.io.Writer;
import java.util.Date;
import java.util.stream.Stream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import manifold.internal.runtime.Bootstrap;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class InfoServlet extends HttpServlet implements IGosuClassObject {
   public final boolean _devMode = ServerModeUtil.isDev();
   boolean _overrideNonProduction;
   boolean _exposeDetails;

   static {
      Bootstrap.init();
   }

   public void init(ServletConfig config) {
      super.init(config);
      String value = config.getInitParameter("OverrideNonProductionOnly");
      this._overrideNonProduction = "true".equals(value);
      value = config.getInitParameter("ExposeDetails");
      this._exposeDetails = "true".equals(value);
   }

   protected void service(HttpServletRequest req, HttpServletResponse resp) {
      if (!this._devMode && !this._overrideNonProduction) {
         resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
      } else {
         JSONObject info = new JSONObject();
         this.writeVersionProperties(info);
         this.writeServlets(info);
         HttpServletResponse writer = resp;
         Writer writerx = StreamUtil.getOutputStreamWriter(writer == null ? (ServletOutputStream)null : writer.getOutputStream());
         resp.setContentType("application/json");
         resp.setCharacterEncoding("UTF-8");
         info.writeJSONString(writerx);
         writerx.flush();
      }
   }

   void writeVersionProperties(JSONObject info) {
      ServerVersion serverVersion = ServerUtil.getServerVersion();
      ServerVersion var3 = serverVersion;
      info.put("ApplicationVersion", var3 == null ? (String)null : var3.getAppVersion());
      var3 = serverVersion;
      info.put("PlatformVersion", var3 == null ? (String)null : var3.getPlatformVersion());
      var3 = serverVersion;
      info.put("CustomerVersion", var3 == null ? (String)null : var3.getCustomerVersion());
      GWProduct var7 = ServerUtil.getProduct();
      info.put("product", var7 == null ? (String)null : var7.getProductCode());
      info.put("env", ServerUtil.getEnv() == null ? "<null>" : ServerUtil.getEnv());
      info.put("server", ServerUtil.getServerId());
      Date var8 = ServerUtil.systemDateTime();
      String var4 = "yyyy-MM-dd'T'HH:mm:ss.SSS";
      if (var8 == null) {
         throw new NullPointerException();
      }

      info.put("time", GWBaseDateCoreEnhancement.format(var8, var4));
   }

   void writeServlets(JSONObject info) {
      Stream servlets = GosuServlet.getAllServlets();
      JSONArray[] servletsInfo = new JSONArray[]{new JSONArray()};
      servletsInfo = servletsInfo;
      info.put("servlets", servletsInfo[0]);
      block_1_ var4 = new block_1_(this, servletsInfo);
      servlets.forEach(var4 == null ? null : new ProxyFor__1657597001241081148(var4));
   }
}
