/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package khanzahmsservicespdgt;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import fungsi.SPDGTApi;
import fungsi.koneksiDB;
import fungsi.sekuel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
import javax.swing.Timer;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;

/**
 *
 * @author windiartonugroho
 */
public class frmUtama extends javax.swing.JFrame {
    private  Properties prop = new Properties();
    private  Connection koneksi=koneksiDB.condb();
    private  sekuel Sequel=new sekuel();
    private  String URL="",respon="";
    private  SPDGTApi api;
    private  HttpHeaders headers;
    private  HttpEntity requestEntity;
    private  JsonNode root;
    private  ObjectMapper mapper = new ObjectMapper();
    private  PreparedStatement ps;
    private  ResultSet rs;

    /**
     * Creates new form frmUtama
     */
    public frmUtama() {
        initComponents();
        try {
            prop.loadFromXML(new FileInputStream("setting/database.xml"));
            URL = koneksiDB.URLAPISPDGT();	
        } catch (Exception e) {
            System.out.println("E : "+e);
        }
        
        this.setSize(390,340);
        
        jam();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        TeksArea = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SIMKES Khanza Service SPDGT");

        TeksArea.setColumns(20);
        TeksArea.setRows(5);
        jScrollPane1.setViewportView(TeksArea);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jButton1.setText("Keluar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1, java.awt.BorderLayout.PAGE_END);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        System.exit(0);
    }//GEN-LAST:event_jButton1ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(frmUtama.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(frmUtama.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(frmUtama.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(frmUtama.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new frmUtama().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextArea TeksArea;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables
    private void jam(){
        ActionListener taskPerformer = new ActionListener(){
            private int nilai_jam;
            private int nilai_menit;
            private int nilai_detik;
            public void actionPerformed(ActionEvent e) {
                String nol_jam = "";
                String nol_menit = "";
                String nol_detik = "";
                Date now = Calendar.getInstance().getTime();
                // Mengambil nilaj JAM, MENIT, dan DETIK Sekarang
                nilai_jam = now.getHours();
                nilai_menit = now.getMinutes();
                nilai_detik = now.getSeconds();
                // Jika nilai JAM lebih kecil dari 10 (hanya 1 digit)
                if (nilai_jam <= 9) {
                    // Tambahkan "0" didepannya
                    nol_jam = "0";
                }
                // Jika nilai MENIT lebih kecil dari 10 (hanya 1 digit)
                if (nilai_menit <= 9) {
                    // Tambahkan "0" didepannya
                    nol_menit = "0";
                }
                // Jika nilai DETIK lebih kecil dari 10 (hanya 1 digit)
                if (nilai_detik <= 9) {
                    // Tambahkan "0" didepannya
                    nol_detik = "0";
                }
                // Membuat String JAM, MENIT, DETIK
                String jam = nol_jam + Integer.toString(nilai_jam);
                String menit = nol_menit + Integer.toString(nilai_menit);
                String detik = nol_detik + Integer.toString(nilai_detik);
                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = new Date();
                if((nilai_jam%4==0)&&(detik.equals("01")&&menit.equals("01"))){
                    if(jam.equals("01")&&menit.equals("01")&&detik.equals("01")){
                        TeksArea.setText("");
                    }
                      
                    api=new SPDGTApi();
                    try {
                        koneksi=koneksiDB.condb();
                        TeksArea.append("Memulai update SPDGT\n");
                        try { 
                            TeksArea.append("Proses Mengirim Stok Darah\n");
                            headers = new HttpHeaders();
                            headers.add("Authorization", "Bearer "+api.TokenSPDGT());
                            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
                            requestEntity = new HttpEntity("golongan_a="+Sequel.cariIsi("select count(utd_stok_darah.no_kantong) from utd_stok_darah where utd_stok_darah.status='Ada' and utd_stok_darah.golongan_darah='A'")+"&golongan_b="+Sequel.cariIsi("select count(utd_stok_darah.no_kantong) from utd_stok_darah where utd_stok_darah.status='Ada' and utd_stok_darah.golongan_darah='B'")+"&golongan_ab="+Sequel.cariIsi("select count(utd_stok_darah.no_kantong) from utd_stok_darah where utd_stok_darah.status='Ada' and utd_stok_darah.golongan_darah='AB'")+"&golongan_o="+Sequel.cariIsi("select count(utd_stok_darah.no_kantong) from utd_stok_darah where utd_stok_darah.status='Ada' and utd_stok_darah.golongan_darah='O'"),headers);
                            respon = api.getRest().exchange(URL+"/Api/update_darah", HttpMethod.POST, requestEntity, String.class).getBody();
                            TeksArea.append("Respon Kirim Darah : "+respon+"\n");
                        }catch (Exception ex) {
                            System.out.println("Notifikasi Bridging : "+ex);
                        }
                        try { 
                            TeksArea.append("Proses Mengirim Ketersediaan Kamar\n");
                            headers = new HttpHeaders();
                            headers.add("Authorization", "Bearer "+api.TokenSPDGT());
                            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
                            requestEntity = new HttpEntity("vvip_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas VVIP' and kamar.statusdata='1'")+
                                                           "&vvip_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas VVIP' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&vvip_keterangan="+
                                                           "&vip_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas VIP' and kamar.statusdata='1'")+
                                                           "&vip_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas VIP' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&vip_keterangan="+
                                                           "&kamar_utama_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas Utama' and kamar.statusdata='1'")+
                                                           "&kamar_utama_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas Utama' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&kamar_utama_keterangan="+
                                                           "&kelas_1_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 1' and kamar.statusdata='1'")+
                                                           "&kelas_1_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 1' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&kelas_1_keterangan="+
                                                           "&kelas_2_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 2' and kamar.statusdata='1'")+
                                                           "&kelas_2_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 2' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&kelas_2_keterangan="+
                                                           "&kelas_3_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 3' and kamar.statusdata='1'")+
                                                           "&kelas_3_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.kelas='Kelas 3' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&kelas_3_keterangan="+
                                                           "&icu_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%icu%' and kamar.statusdata='1'")+
                                                           "&icu_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%icu%' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&icu_keterangan="+
                                                           "&iccu_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%iccu%' and kamar.statusdata='1'")+
                                                           "&iccu_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%iccu%' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&iccu_keterangan="+
                                                           "&peristi_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%peri%' and kamar.statusdata='1'")+
                                                           "&peristi_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%peri%' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&peristi_keterangan="+
                                                           "&ruang_bersalin_kapasitas=&ruang_bersalin_tersedia=&ruang_bersalin_keterangan&poli_kapasitas=&poli_tersedia=&poli_keterangan="+
                                                           "&isolasi_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%iso%' and kamar.statusdata='1'")+
                                                           "&isolasi_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar inner join bangsal on bangsal.kd_bangsal=kamar.kd_bangsal where bangsal.nm_bangsal like '%iso%' and kamar.statusdata='1' and kamar.status='KOSONG'")+"&isolasi_keterangan="+
                                                           "&jumlah_tempat_tidur_kapasitas="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.statusdata='1'")+
                                                           "&jumlah_tempat_tidur_tersedia="+Sequel.cariIsi("select count(kamar.kd_kamar) from kamar where kamar.statusdata='1' and kamar.status='KOSONG'")+"&jumlah_tempat_tidur_keterangan=&ugd=&ugd_keterangan=&ventilator=&ventilator_keterangan=&dokter_jumlah=&dokter_spesialis_jumlah=&bidan_jumlah=&perawat_jumlah=&ambulans_jumlah=",headers);
                            respon = api.getRest().exchange(URL+"/Api/update_kamar", HttpMethod.POST, requestEntity, String.class).getBody();
                            TeksArea.append("Respon Kirim Ketersediaan Kamar : "+respon+"\n");
                        }catch (Exception ex) {
                            System.out.println("Notifikasi Bridging : "+ex);
                        }
                        TeksArea.append("Proses update selesai\n");
                    } catch (Exception ez) {
                        System.out.println("Notif : "+ez);
                    }
                }
            }
        };
        // Timer
        new Timer(1000, taskPerformer).start();
    }
}
