import java.util.HashMap;
import java.util.Map;
import eu.hsrw.ias.ggd.SensorData
import javax.swing.JOptionPane
import HttpCall.HttpPost
import eu.hsrw.ias.ggd.Notification
import eu.hsrw.ias.ggd.Severity;
import eu.hsrw.ias.ggd.Device;


rule "CriticalBattery"
    when
        device: Device(sensorDatas: sensorData)
        sensorData: SensorData(tag == "battery", value < 4.0) from sensorDatas

    then

        String greenhouse1="8bdbe6ae-eafb-4e99-bb01-db8784dd9633";
        HttpPost httpPost = new HttpPost();
        final String criticalBatteryOutput = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Critical Battery %s in the following sensor %s \", \"battery\": %s}]}}",greenhouse1, sensorData.getValue(),sensorData.getTag(),sensorData.getValue());
        httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",criticalBatteryOutput);
        insert(new Notification("battery", sensorData, Severity.Critical));

//        modify(sensorData){
//            setState(Severity.Critical)
//        }

end

rule "OptimalBattery"
    when
        device: Device(sensorDatas: sensorData)
        sensorData: SensorData(tag == "battery", value > 4.0) from sensorDatas

    then

        String greenhouse1="8bdbe6ae-eafb-4e99-bb01-db8784dd9633";
        HttpPost httpPost = new HttpPost();
        final String optimalBatteryOutput = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Optimal Battery %s in the following sensor %s \", \"battery\": %s}]}}",greenhouse1, sensorData.getValue(),sensorData.getTag(),sensorData.getValue());
        httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",optimalBatteryOutput);
        insert(new Notification("battery", sensorData, Severity.Optimal));

//        modify(sensorData){
//            setState(Severity.Optimal)
//        }

end






//        System.out.println(sensorData.getTag()+" "+sensorData.getValue());
//        System.out.println(device);

        /*String fixedIdG1="8bdbe6ae-eafb-4e99-bb01-db8784dd9633";
        HttpPost httpPost = new HttpPost();
//        System.out.println("Tag: '"+tag+"' has low battery with value: '"+level+"'");
        final String battery = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Critical! Low Battery %s \", \"battery\": %s}]}}", fixedIdG1,level,level);
        httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",battery);
        System.out.println("Low Battery"+level+"in the following sensor"+tag);
        */
        /*HttpPost httpPost = new HttpPost();

        final String finalOutput;
        boolean critical = false;
        HashMap<String,Double> test = new HashMap<>();
        if (tag.equals("fd694041-581e-4c2c-9810-505e62b762e6")){ // This matches 70B3D570500042D7
                      if (level < 7.2 && k.equals("battery") ) {
                                 JOptionPane.showMessageDialog(null,"Low Battery : "+level+"! Please swap the battery soon of the following sensor:"+tag,"Low Battery Level",JOptionPane.INFORMATION_MESSAGE);
                                 final String battery = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Critical! Low Battery %s \", \"battery\": %s}]}}", fixedIdG1,level,level);
                                 httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",battery);
                                 System.out.println("Low Battery"+level+"in the following sensor"+tag);
                                 critical = true;
                                 test.put("battery",level);
                             }
                      if (level > 80 && k.equals("temperature") ) {
                                 JOptionPane.showMessageDialog(null,"High Temperature : "+level+" in the following sensor: "+tag+"in the following device id: "+id,"Temperature",JOptionPane.INFORMATION_MESSAGE);
                                 final String temperature = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Critical!High Temperature %s \", \"temperature\": %s}]}}", fixedIdG1,level,level);
                                 httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",temperature);
                                 System.out.println("High Temp");
                                 critical = true;
                             }
                      if (level > 14.5 && k.equals("precipitation") ) {
                                 JOptionPane.showMessageDialog(null,"High water level : "+level+" in the following sensor"+tag,"Precipitation",JOptionPane.INFORMATION_MESSAGE);
                                 final String precipitation = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"High water level %s\", \"precipitation\": %s}]}}", fixedIdG1, level,level);
                                 httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",precipitation);
                                 System.out.println("High water level"+level +" in the following sensor:"+tag);
                                 critical = true;
                                             }
                      if (level < 22 && k.equals("soilTemperature") ) {
                                          JOptionPane.showMessageDialog(null,"Low soil temperature : "+level+" in the following sensor: "+tag+"in the following device id: "+id,"soil Temperature",JOptionPane.INFORMATION_MESSAGE);
                                          final String soilTemperature = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Low soil temperature %s in the following sensor: %s \", \"soilTemperature\": %s}]}}", fixedIdG1,level, tag,level);
                                          httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",soilTemperature);
                                          System.out.println("Low soil Temperature"+level+" in the following sensor "+tag);
                                          critical = true;
                                          test.put("soilTemperature",level);
                                      }
                      if (level <= 30 && k.equals("soilMoisture") ) {
                                       JOptionPane.showMessageDialog(null,"Be Careful the soil is dry : "+level+" in the following sensor :"+tag +"in the device:"+id,"Soil Moisture",JOptionPane.INFORMATION_MESSAGE);
                                       final String soilMoisture = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Be Careful the soil sensor %s is dry: %s  \", \"soilMoisture\": %s}]}}", fixedIdG1,tag,level,level);
                                       httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",soilMoisture);
                                       System.out.println("Soil is dry"+level+" in the following sensor"+tag);
                                       critical = true;
                                   }
                      if (level <= 0.57 && level >= 0.11 && k.equals("soilConductivity") ) {
                                    JOptionPane.showMessageDialog(null,"Optimal EC levels in the soil : "+level+" in the following sensor"+tag,"Soil Conductivity",JOptionPane.INFORMATION_MESSAGE);
                                    final String soilConductivity = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"Optimal EC levels in the soil %s\", \"soilConductivity\": %s}]}}", fixedIdG1, level,level);
                                    httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",soilConductivity);
                                    System.out.println("Optimal EC levels in the soil"+level +" in the following sensor:"+tag);
                                    critical = true;
                                }
                      if (level > 20 && k.equals("dielectricPermittivity") ) {
                                       JOptionPane.showMessageDialog(null,"High dielectricPermittivity : "+level+" in the following sensor"+tag,"dielectricPermittivity",JOptionPane.INFORMATION_MESSAGE);
                                       final String dielectricPermittivity = String.format("{\"id\":\"%s\",\"data\":{\"measured\":[{ \"status\": \"High dielectricPermittivity %s\", \"dielectricPermittivity\": %s}]}}", fixedIdG1, level,level);
                                       httpPost.HttpCallPost("http://connector.dev.whysor.com/default/insert?access_token=3hosOhAeh4k0XmcuAMQGfYldvTuQDvtAj2PJJ4irKPBefD5Ijij6gnUkLtVLd4fW",dielectricPermittivity);
                                       System.out.println("High dielectricPermittivity"+level +" in the following sensor:"+tag);
                                       critical = true;
                                    }
//                      if(critical == true){
//                          finalOutput
//                      }
                        finalOutput = String.format("{\"id\":\"70B3D570500042D7-status\",\"data\":{\"measured\":[{ \"status\": \"The status of the device 1 is critical\",}]}}");
                        System.out.println(finalOutput);
        }*/