package com.frames;

import com.dbc.DBConnection;
import com.models.Languages;
import java.awt.Desktop;
import static java.awt.Desktop.getDesktop;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 *
 * @author Neriman-laptop
 */
public final class Main extends JFrame {

    /**
     * Creates new form Main
     */
    private static final DBConnection listLanguage = new DBConnection();

    /**
     * @main
     */
  
          
    public Main() {
        initComponents();
        setLocationRelativeTo(this);
        this.setTitle("EVIL INSULT GENERATOR");
        this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/com/imgs/app-icon.png")));

        addCombobox();

        AutoCompleteDecorator.decorate(this.cmbLanguage);
        DefaultListCellRenderer dlcr = new DefaultListCellRenderer();
        dlcr.setHorizontalAlignment(DefaultListCellRenderer.CENTER);

        cmbLanguage.setRenderer(dlcr);

        StyledDocument doc = txtPaneShow.getStyledDocument();
        SimpleAttributeSet center = new SimpleAttributeSet();
        StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
        doc.setParagraphAttributes(0, doc.getLength(), center, false);

        try {

            Document doc1 = Jsoup.connect("http://evilinsult.com/generate_insult.php?lang=en").get();

            Elements links = doc1.select("body");
            for (Element link : links) {
                txtPaneShow.setText("\n" + link.text());
            }
        } catch (RuntimeException e) {
            throw e;
        } catch (Exception ex) {
            txtPaneShow.setText("Insult Outage! Please Check Your Internet Connection And Try Again In Three Minutes");
        }

    }

    /**
     * @void
     */
    public void addCombobox() {

        try {
            for (Languages l : listLanguage.listLanguages()) {
                cmbLanguage.addItem(l);
            }

        } catch (RuntimeException e) {
            throw e;
        } catch (Exception e) {
        }
    }

    public void showWord() {
        try {
            String language;
            Languages l;
            l = (Languages) cmbLanguage.getSelectedItem();
            language = l.getLang();
            Document doc = Jsoup.connect("http://evilinsult.com/generate_insult.php?lang=" + language).get();
            Elements links = doc.select("body");
            for (Element link : links) {
                txtPaneShow.setText("\n" + link.text());
            }
        } catch (RuntimeException e) {
            throw e;
        } catch (Exception ex) {
            txtPaneShow.setText("\n" + "Insult Outage! Please Check Your Internet Connection And Try Again In Three Minutes");
        }
    }

    /**
     *
     * @param URL
     */
    public void webPages(String URL) {

        try {
            getDesktop().browse(URI.create(URL));
        } catch (IOException ex) {
            // Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * 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", "Convert2Lambda"})
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        btnGenerate = new javax.swing.JButton();
        javax.swing.JScrollPane jScrollPane2 = new javax.swing.JScrollPane();
        txtPaneShow = new javax.swing.JTextPane();
        cmbLanguage = new javax.swing.JComboBox();
        javax.swing.JMenuBar jMenuBar1 = new javax.swing.JMenuBar();
        javax.swing.JMenu jMenu1 = new javax.swing.JMenu();
        javax.swing.JMenu jMenu2 = new javax.swing.JMenu();
        javax.swing.JPopupMenu.Separator jSeparator1 = new javax.swing.JPopupMenu.Separator();
        jMenuItem1 = new javax.swing.JMenuItem();
        javax.swing.JMenuItem jMenuItem2 = new javax.swing.JMenuItem();
        javax.swing.JMenuItem jMenuItem3 = new javax.swing.JMenuItem();
        javax.swing.JMenuItem jMenuItem4 = new javax.swing.JMenuItem();
        javax.swing.JMenu jMenu3 = new javax.swing.JMenu();
        javax.swing.JMenu jMenu4 = new javax.swing.JMenu();
        javax.swing.JMenu jMenu5 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(13, 109, 179));
        setMinimumSize(new java.awt.Dimension(742, 465));
        setState(4);
        addWindowStateListener(new java.awt.event.WindowStateListener() {
            public void windowStateChanged(java.awt.event.WindowEvent evt) {
                formWindowStateChanged(evt);
            }
        });

        jPanel1.setBackground(new java.awt.Color(13, 109, 179));
        jPanel1.setForeground(new java.awt.Color(204, 255, 51));

        btnGenerate.setBackground(new java.awt.Color(255, 255, 255));
        btnGenerate.setFont(new java.awt.Font("Roboto", 1, 18)); // NOI18N
        btnGenerate.setForeground(new java.awt.Color(51, 204, 255));
        btnGenerate.setText("Generate Insult");
        btnGenerate.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        btnGenerate.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnGenerate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGenerateActionPerformed(evt);
            }
        });

        txtPaneShow.setBackground(new java.awt.Color(13, 109, 179));
        txtPaneShow.setBorder(null);
        txtPaneShow.setFont(new java.awt.Font("Roboto", 1, 36)); // NOI18N
        txtPaneShow.setForeground(new java.awt.Color(13, 109, 179));
        txtPaneShow.setCaretColor(new java.awt.Color(255, 255, 255));
        txtPaneShow.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
        txtPaneShow.setMaximumSize(new java.awt.Dimension(214, 2147483647));
        txtPaneShow.setSelectionColor(java.awt.Color.blue);
        jScrollPane2.setViewportView(txtPaneShow);

        cmbLanguage.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N
        cmbLanguage.setForeground(new java.awt.Color(51, 204, 255));
        cmbLanguage.setAlignmentX(1.0F);
        cmbLanguage.setAlignmentY(1.0F);
        cmbLanguage.setVerifyInputWhenFocusTarget(false);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(86, 86, 86)
                .addComponent(jScrollPane2)
                .addGap(96, 96, 96))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(220, 220, 220)
                        .addComponent(btnGenerate, javax.swing.GroupLayout.PREFERRED_SIZE, 256, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(288, 288, 288)
                        .addComponent(cmbLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(266, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(120, 120, 120)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnGenerate, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 67, Short.MAX_VALUE)
                .addComponent(cmbLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jMenuBar1.setBackground(new java.awt.Color(4, 6, 78));
        jMenuBar1.setBorder(null);
        jMenuBar1.setForeground(new java.awt.Color(255, 255, 255));
        jMenuBar1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jMenuBar1.setFont(new java.awt.Font("Segoe UI", 0, 18)); // NOI18N
        jMenuBar1.setPreferredSize(new java.awt.Dimension(233, 40));

        jMenu1.setBackground(new java.awt.Color(2, 2, 17));
        jMenu1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenu1.setForeground(new java.awt.Color(51, 204, 255));
        jMenu1.setText("            Generate            ");
        jMenu1.setFont(new java.awt.Font("Roboto", 1, 16)); // NOI18N
        jMenu1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jMenu1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jMenu1.setOpaque(true);
        jMenu1.setPreferredSize(new java.awt.Dimension(300, 23));
        jMenu1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jMenu1MouseClicked(evt);
            }
        });
        jMenuBar1.add(jMenu1);

        jMenu2.setBackground(new java.awt.Color(2, 2, 17));
        jMenu2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenu2.setForeground(new java.awt.Color(51, 204, 255));
        jMenu2.setText("            Social            ");
        jMenu2.setFont(new java.awt.Font("Roboto", 1, 16)); // NOI18N
        jMenu2.setOpaque(true);
        jMenu2.setPreferredSize(new java.awt.Dimension(300, 23));

        jSeparator1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 5));
        jMenu2.add(jSeparator1);

        jMenuItem1.setBackground(new java.awt.Color(2, 2, 17));
        jMenuItem1.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
        jMenuItem1.setForeground(new java.awt.Color(51, 204, 255));
        jMenuItem1.setText("Proposal               ");
        jMenuItem1.setOpaque(true);
        jMenuItem1.setPreferredSize(new java.awt.Dimension(150, 22));
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem1);

        jMenuItem2.setBackground(new java.awt.Color(2, 2, 17));
        jMenuItem2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
        jMenuItem2.setForeground(new java.awt.Color(51, 204, 255));
        jMenuItem2.setText("Facebook");
        jMenuItem2.setOpaque(true);
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem2);

        jMenuItem3.setBackground(new java.awt.Color(2, 2, 17));
        jMenuItem3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
        jMenuItem3.setForeground(new java.awt.Color(51, 204, 255));
        jMenuItem3.setText("Twitter");
        jMenuItem3.setOpaque(true);
        jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem3ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem3);

        jMenuItem4.setBackground(new java.awt.Color(2, 2, 17));
        jMenuItem4.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
        jMenuItem4.setForeground(new java.awt.Color(51, 204, 255));
        jMenuItem4.setText("Newsletter");
        jMenuItem4.setOpaque(true);
        jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem4ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem4);

        jMenuBar1.add(jMenu2);

        jMenu3.setBackground(new java.awt.Color(2, 2, 17));
        jMenu3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenu3.setForeground(new java.awt.Color(51, 204, 255));
        jMenu3.setText("            Contact            ");
        jMenu3.setFont(new java.awt.Font("Roboto", 1, 16)); // NOI18N
        jMenu3.setOpaque(true);
        jMenu3.setPreferredSize(new java.awt.Dimension(300, 23));
        jMenu3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jMenu3MouseClicked(evt);
            }
        });
        jMenuBar1.add(jMenu3);

        jMenu4.setBackground(new java.awt.Color(2, 2, 17));
        jMenu4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenu4.setForeground(new java.awt.Color(51, 204, 255));
        jMenu4.setText("            Website            ");
        jMenu4.setFont(new java.awt.Font("Roboto", 1, 16)); // NOI18N
        jMenu4.setOpaque(true);
        jMenu4.setPreferredSize(new java.awt.Dimension(300, 23));
        jMenu4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jMenu4MouseClicked(evt);
            }
        });
        jMenuBar1.add(jMenu4);

        jMenu5.setBackground(new java.awt.Color(2, 2, 17));
        jMenu5.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenu5.setForeground(new java.awt.Color(51, 204, 255));
        jMenu5.setText("            Legal            ");
        jMenu5.setFont(new java.awt.Font("Roboto", 1, 16)); // NOI18N
        jMenu5.setOpaque(true);
        jMenu5.setPreferredSize(new java.awt.Dimension(300, 23));
        jMenu5.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jMenu5MouseClicked(evt);
            }
        });
        jMenuBar1.add(jMenu5);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void btnGenerateActionPerformed(ActionEvent evt) {                                            
        evt.getID();
        showWord();

    }                                           

    private void formWindowStateChanged(WindowEvent evt) {                                        
        evt.getID();
        int x = this.getWidth() / 2;
        int y = this.getHeight();
        cmbLanguage.setLocation(x - cmbLanguage.getPreferredSize().width / 2, y - 110);
        jPanel1.add(cmbLanguage);

        btnGenerate.setLocation(x - btnGenerate.getPreferredSize().width, y - 220);
        jPanel1.add(btnGenerate);

        if (y != 503) {
            java.awt.Dimension dim = new java.awt.Dimension(275, 21);
            jMenuItem1.setPreferredSize(dim);
        } else {
            java.awt.Dimension dim = new java.awt.Dimension(150, 21);
            jMenuItem1.setPreferredSize(dim);
        }


    }                                       

    private void jMenu1MouseClicked(MouseEvent evt) {                                    
        evt.getID();
        showWord();
    }                                   

    private void jMenuItem2ActionPerformed(ActionEvent evt) {                                           
        evt.getID();
        String URL = "https://www.facebook.com/EvilInsultGenerator/";
        webPages(URL);
    }                                          

    private void jMenuItem3ActionPerformed(ActionEvent evt) {                                           
        evt.getID();
        String URL = "https://twitter.com/__E__I__G__";
        webPages(URL);
    }                                          

    private void jMenuItem4ActionPerformed(ActionEvent evt) {                                           
        evt.getID();
        String URL = "https://evilinsult.com/newsletter/";
        webPages(URL);
    }                                          

    private void jMenu4MouseClicked(MouseEvent evt) {                                    
        evt.getID();
        String URL = "https://evilinsult.com/";
        webPages(URL);
    }                                   

    private void jMenu5MouseClicked(MouseEvent evt) {                                    
        evt.getID();
        String URL = "https://evilinsult.com/legal.html";
        webPages(URL);
    }                                   

    private void jMenu3MouseClicked(MouseEvent evt) {                                    
        evt.getID();
        Desktop desktop = getDesktop();
        try {
            try {
                desktop.mail(new URI("mailto:[email protected]?Subject=Evil%20Insult%20Generator%20Contact&Body=Marvin%2C%20fuck%20you%21"));
            } catch (URISyntaxException ex) {
                //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (IOException ex) {
            //  Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                   

    private void jMenuItem1ActionPerformed(ActionEvent evt) {                                           
        Desktop desktop = getDesktop();
        evt.getID();
        try {
            try {
                desktop.mail(new URI("mailto:[email protected]?Subject=Evil%20Insult%20Generator%20Proposal&Body=Hej%20fuckers%2C%0A%0Aplease%20add%20this%20beauty%3A%0A%0Ainsult%3A%20...%0Alanguage%3A%20...%0Acomment%20%28optional%29%3A%20...%0A%0A...%0A"));
            } catch (URISyntaxException ex) {
                //   Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (IOException ex) {
            //  Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                          

    /**
     * @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 (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        //</editor-fold>

        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(() -> {
            new Main().setVisible(true);
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton btnGenerate;
    private javax.swing.JComboBox cmbLanguage;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextPane txtPaneShow;
    // End of variables declaration                   
}