package com.techcavern.wavetact.thread;

import com.techcavern.wavetact.objects.UTime;
import com.techcavern.wavetact.utils.GeneralRegistry;
import com.techcavern.wavetact.utils.IRCUtils;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;

import java.util.concurrent.TimeUnit;

public class CheckTime implements Runnable {

    private boolean loaded = false;

    @Override
    public void run() {
        while (true) {
            try {
                TimeUnit.SECONDS.sleep(5);
                try {
                    if (!loaded) {
                        IRCUtils.loadBanTimes();
                        IRCUtils.loadQuietTimes();
                        loaded = true;
                    }
                } catch (NullPointerException ignored) {}

                if (!loaded)
                    continue;

                for (int i = 0; i < GeneralRegistry.BanTimes.size(); i++) {
                    UTime x = GeneralRegistry.BanTimes.get(i);
                    if (System.currentTimeMillis() >= x.getTime()) {
                        PircBotX b = IRCUtils.getBotByNetwork(x.getNetwork());
                        IRCUtils.setMode(IRCUtils.getChannelbyName(b, x.getChannel()), b, "-b ", x.getHostmask());
                        GeneralRegistry.BanTimes.remove(x);
                    }
                }

                for (int i = 0; i < GeneralRegistry.QuietTimes.size(); i++) {
                    UTime x = GeneralRegistry.QuietTimes.get(i);
                    if (System.currentTimeMillis() >= x.getTime()) {
                        PircBotX b = IRCUtils.getBotByNetwork(x.getNetwork());
                        switch (x.getType().toLowerCase()) {
                            case "u":
                                IRCUtils.setMode(IRCUtils.getChannelbyName(b, x.getChannel()), b, "-b ~q:", x.getHostmask());
                                break;
                            case "c":
                                IRCUtils.setMode(IRCUtils.getChannelbyName(b, x.getChannel()), b, "-q ", x.getHostmask());
                                break;
                            case "i":
                                IRCUtils.setMode(IRCUtils.getChannelbyName(b, x.getChannel()), b, "-b m:", x.getHostmask());
                                break;
                        }
                        GeneralRegistry.QuietTimes.remove(x);
                    }
                }

                IRCUtils.saveBanTimes();
                IRCUtils.saveQuietTimes();
            } catch (InterruptedException
                    | IllegalArgumentException
                    | NullPointerException e) {
                // Ignored
            }
        }
    }

}


@@ -979,32 +979,62 @@
 anTimes.get(i);%0A
+                    try %7B%0A    
                 
@@ -1078,32 +1078,36 @@
  x.getTime()) %7B%0A
+    
                 
@@ -1185,32 +1185,36 @@
                 
+    
 IRCUtils.setMode
@@ -1304,32 +1304,36 @@
                 
+    
 GeneralRegistry.
@@ -1344,32 +1344,228 @@
 imes.remove(x);%0A
+                            IRCUtils.saveBanTimes();%0A                        %7D%0A                    %7D catch (IllegalArgumentException %7C NullPointerException e) %7B%0A                        // ignored%0A
                 
@@ -1724,32 +1724,62 @@
 etTimes.get(i);%0A
+                    try %7B%0A    
                 
@@ -1823,32 +1823,36 @@
  x.getTime()) %7B%0A
+    
                 
@@ -1906,32 +1906,36 @@
 .getNetwork());%0A
+    
                 
@@ -2003,24 +2003,28 @@
             
+    
 case %22u%22:%0A  
@@ -2021,16 +2021,20 @@
 se %22u%22:%0A
+    
         
@@ -2175,39 +2175,47 @@
                 
+    
 break;%0A
+    
                 
@@ -2260,32 +2260,36 @@
                 
+    
 IRCUtils.setMode
@@ -2387,32 +2387,36 @@
                 
+    
 break;%0A         
@@ -2430,24 +2430,28 @@
             
+    
 case %22i%22:%0A  
@@ -2448,16 +2448,20 @@
 se %22i%22:%0A
+    
         
@@ -2601,32 +2601,36 @@
                 
+    
 break;%0A         
@@ -2636,34 +2636,42 @@
                 
-%7D%0A
+    %7D%0A    
                 
@@ -2736,33 +2736,8 @@
     
-    %7D%0A                %7D%0A%0A
     
@@ -2736,36 +2736,32 @@
                 
-    
 IRCUtils.saveBan
@@ -2749,35 +2749,37 @@
    IRCUtils.save
-Ban
+Quiet
 Times();%0A       
@@ -2791,35 +2791,23 @@
     
-IRCUtils.saveQuietTimes();%0A
+        %7D%0A     
     
@@ -2806,32 +2806,35 @@
                 
+   
 %7D catch (Interru
@@ -2831,18 +2831,45 @@
 h (I
-nterrupted
+llegalArgumentException %7C NullPointer
 Exce
@@ -2865,33 +2865,39 @@
 PointerException
-%0A
+ e) %7B%0A 
                 
@@ -2904,34 +2904,43 @@
     
-%7C IllegalArgumentException
+   // ignored%0A                    %7D
 %0A   
@@ -2956,25 +2956,42 @@
     
+%7D%0A
     
-%7C NullPointer
+        %7D catch (Interrupted
 Exce
@@ -3021,18 +3021,28 @@
     
-// Ignored
+e.printStackTrace();
 %0A   

Fix ban/quiet time JSON saving