package com.l7tech.server.log;

import com.l7tech.common.log.HybridDiagnosticContextFilter;
import com.l7tech.common.log.SerializableFilter;
import com.l7tech.common.log.HybridDiagnosticContextMatcher.MatcherRules;
import com.l7tech.gateway.common.log.GatewayDiagnosticContextKeys;
import com.l7tech.gateway.common.log.SinkConfiguration;
import com.l7tech.server.ServerConfig;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import java.io.IOException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

class FileMessageSink extends MessageSinkSupport implements Serializable {
   private static final Logger logger;
   private static final String PROP_FILE_LOG_PATH;
   private final LogFileConfiguration logFileConfiguration;
   private final Handler handler;
   static final long serialVersionUID = 5552454089904243390L;
   private static final String[] e;

   @Override
   public void close() throws IOException {
      this.handler.setErrorManager(new q());
      this.handler.close();
   }

   @Override
   public List<Handler> getHandlers() {
      return Collections.singletonList(this.handler);
   }

   FileMessageSink(ServerConfig var1, SinkConfiguration var2) throws MessageSinkSupport.ConfigurationException {
      super(var2);
      this.logFileConfiguration = this.buildLogFileConfiguration(var1, var2);
      this.handler = this.buildHandler(this.logFileConfiguration);
   }

   @Override
   void processMessage(MessageCategory var1, LogRecord var2) {
      this.handler.publish(var2);
   }

   @Override
   int getThreshold() {
      int var1 = com.l7tech.server.log.d.a(e[8]);
      if (var1 == 0) {
         var1 = super.getThreshold();
      }

      return var1;
   }

   public String getFilePattern() {
      return this.logFileConfiguration.getFilepat();
   }

   private Handler buildHandler(LogFileConfiguration var1) throws MessageSinkSupport.ConfigurationException {
      try {
         return var1.buildFileHandler();
      } catch (IOException var4) {
         throw new MessageSinkSupport.ConfigurationException(e[6], var4);
      }
   }

   private LogFileConfiguration buildLogFileConfiguration(ServerConfig var1, SinkConfiguration var2) throws MessageSinkSupport.ConfigurationException {
      String var3 = var2.getName();
      String var4 = var2.getProperty(SinkConfiguration.PROP_FILE_MAX_SIZE);
      String var5 = var2.getProperty(SinkConfiguration.PROP_FILE_LOG_COUNT);
      String[] var15 = e;
      String var6 = var2.getProperty(var15[0]);
      String var7 = var2.getProperty(SinkConfiguration.PROP_FILE_FORMAT);

      try {
         String var8 = var2.getCategories();

         label27: {
            try {
               if (var8 == null || !var8.equals(SinkConfiguration.CATEGORY_SSPC_LOGS)) {
                  break label27;
               }
            } catch (IOException var16) {
               throw a(var16);
            }

            var15 = e;
            var6 = ConfigFactory.getProperty(var15[2]) + var15[15];
         }

         String var9;
         if (var2.isRollingEnabled()) {
            var9 = com.l7tech.server.log.d.a(var1, var3, var6, var2.getRollingInterval());
         } else {
            var9 = com.l7tech.server.log.d.a(var1, var3, var6, false);
         }

         var15 = e;
         int var10 = this.parseIntWithDefault(var15[9] + var3, var4, 1024) * 1024;
         int var11 = this.parseIntWithDefault(var15[3] + var3, var5, 2);
         boolean var12 = true;
         String var13 = this.getFormatPattern(var3, var7);
         int var14 = this.getThreshold();
         return new LogFileConfiguration(var9, var10, var11, var12, var14, var13, this.buildFilter(var2), var2.isRollingEnabled(), var2.getRollingInterval());
      } catch (IOException var17) {
         throw new MessageSinkSupport.ConfigurationException(ExceptionUtils.getMessage(var17), var17);
      }
   }

   private SerializableFilter buildFilter(SinkConfiguration var1) {
      return new HybridDiagnosticContextFilter(new MatcherRules(var1.getFilters(), GatewayDiagnosticContextKeys.PREFIX_MATCH_PROPERTIES));
   }

   private int parseIntWithDefault(String var1, String var2, int var3) {
      int var4 = var3;

      try {
         if (var2 != null) {
            var4 = Integer.parseInt(var2);
         }
      } catch (NumberFormatException var10) {
         int var6 = var3;
         String var7 = var2;
         String var8 = var1;
         String[] var9 = e;
         logger.log(Level.WARNING, var9[16] + var8 + var9[11] + var7 + var9[7] + var6 + var9[10]);
      }

      return var4;
   }

   private String getFormatPattern(String var1, String var2) {
      LogManager var10000 = LogManager.getLogManager();
      String[] var4 = e;
      String var3 = var10000.getProperty(var4[12] + var1 + "." + var2);
      if (var3 == null) {
         var3 = LogManager.getLogManager().getProperty(var4[1] + var2);
      }

      label34: {
         try {
            if (var3 != null) {
               return var3;
            }

            if (SinkConfiguration.FILE_FORMAT_RAW.equals(var2)) {
               break label34;
            }
         } catch (NumberFormatException var5) {
            throw a(var5);
         }

         if (SinkConfiguration.FILE_FORMAT_VERBOSE.equals(var2)) {
            var4 = e;
            var3 = var4[4];
         } else {
            var3 = e[5];
         }

         return var3;
      }

      var4 = e;
      return var4[13];
   }

   private Object writeReplace() throws ObjectStreamException {
      return this.logFileConfiguration;
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "*\u0004\u0013FKsP+=\u001eW\r\f?\u0004\u0011HKyP>\u0000\u001eWK\u0016/\u0002\u0012\r\t(K)\u000e\u0017\r\u0016zM:\b\r\r\u0007~L)\u0013 \u0002\u0018\u0003\u0003vS)M\u001cL\u0010qKl\u000b\u0010QEQi\\[W<2\u001a}I\u000bNH:\u000eh\u0019\u001bw@.\u001b8%E\u0006T;K\u0001WZ\u0012AklbHN\u0007\u0011S\u001a}I\u000bYE:\rh@HPE:\nh\t_\u0006];LlHL\u0007\u0016?\u001azI\f\u0019E:\u000bh\u001eZMLi\\[W<2\u001a}I\u000bNH:\u000eh\u0019\u001bw@.\u001b8%E\u0006T;K\u0001WZ\u0012AklbHN\u0007\u0011S\u001a}I\u000bYE:\rh@HPE:\nh\t_\u0006];LlHL\u0007\u0016%\u001fiY[P@q\u001f\t\u001f\rL\u0017?\\>\b\u001eW\fqXl\u0001\u0010DEyV \b_K\u0004q[ \b\r\u0018kC_v\u0016vQ+M\u001bF\u0003~J \u0019_U\u0004sJ)MX\n?\u0004\u0011HKsZ:\b\u0013\u0013 \u0002\u0018\u0003\u0003vS)M\u0013J\bvKl\u000b\u0010QE\u0002kC\u0002lJ\f?\u0004\u0011HKyP>\u0000\u001eWK\u0006iY[P@q\f*\u0004\u0013FKsP+=\u001eW\r";
      int var4 = "*\u0004\u0013FKsP+=\u001eW\r\f?\u0004\u0011HKyP>\u0000\u001eWK\u0016/\u0002\u0012\r\t(K)\u000e\u0017\r\u0016zM:\b\r\r\u0007~L)\u0013 \u0002\u0018\u0003\u0003vS)M\u001cL\u0010qKl\u000b\u0010QEQi\\[W<2\u001a}I\u000bNH:\u000eh\u0019\u001bw@.\u001b8%E\u0006T;K\u0001WZ\u0012AklbHN\u0007\u0011S\u001a}I\u000bYE:\rh@HPE:\nh\t_\u0006];LlHL\u0007\u0016?\u001azI\f\u0019E:\u000bh\u001eZMLi\\[W<2\u001a}I\u000bNH:\u000eh\u0019\u001bw@.\u001b8%E\u0006T;K\u0001WZ\u0012AklbHN\u0007\u0011S\u001a}I\u000bYE:\rh@HPE:\nh\t_\u0006];LlHL\u0007\u0016%\u001fiY[P@q\u001f\t\u001f\rL\u0017?\\>\b\u001eW\fqXl\u0001\u0010DEyV \b_K\u0004q[ \b\r\u0018kC_v\u0016vQ+M\u001bF\u0003~J \u0019_U\u0004sJ)MX\n?\u0004\u0011HKsZ:\b\u0013\u0013 \u0002\u0018\u0003\u0003vS)M\u0013J\bvKl\u000b\u0010QE\u0002kC\u0002lJ\f?\u0004\u0011HKyP>\u0000\u001eWK\u0006iY[P@q\f*\u0004\u0013FKsP+=\u001eW\r"
         .length();
      char var1 = '\f';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 105;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     e = var5;
                     PROP_FILE_LOG_PATH = e[14];
                     logger = Logger.getLogger(FileMessageSink.class.getName());
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "z7\tT\btI9\u0018\u0003HSpG'[\nU\u001bu\u0017\u0016\u001b\b\\\u0015aS'\u0015\u0012S\u0013h\u00060\u0006\u0014U\u000e&O;T";
                  var4 = "z7\tT\btI9\u0018\u0003HSpG'[\nU\u001bu\u0017\u0016\u001b\b\\\u0015aS'\u0015\u0012S\u0013h\u00060\u0006\u0014U\u000e&O;T".length();
                  var1 = 20;
                  var7 = -1;
            }

            var10000 = 112;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 86);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 37;
            case 1 -> 4;
            case 2 -> 22;
            case 3 -> 74;
            case 4 -> 12;
            case 5 -> 118;
            default -> 86;
         });
      }

      return new String(var10001).intern();
   }
}
