/*
 * DeTau.java
 *
 * Created on 2005. travanj 22, 13:07
 */

/**
 *
 * @author  alf
 */
package DeTau;
import org.netbeans.lib.awtextra.*;

public class DeTau extends javax.swing.JFrame {
    
    /** Creates new form DeTau */
    public DeTau() {
        initComponents();
    }
    
    /** 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.
     */
    private void initComponents() {//GEN-BEGIN:initComponents
        jLabel1 = new javax.swing.JLabel();
        sifratTF = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        startButton = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabel3 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea2 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("DeTau");
        setForeground(new java.awt.Color(236, 233, 216));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jLabel1.setText("Unesite sifrat (bez razmaka):");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, -1, -1));

        getContentPane().add(sifratTF, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 10, 240, -1));

        jLabel2.setText("Pronadji moguce rasporede: ");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 50, -1, -1));

        startButton.setBackground(new java.awt.Color(255, 0, 0));
        startButton.setText("Start");
        startButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                startButtonActionPerformed(evt);
            }
        });

        getContentPane().add(startButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(200, 50, -1, -1));

        jTextArea1.setBackground(new java.awt.Color(230, 228, 228));
        jScrollPane1.setViewportView(jTextArea1);

        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 100, 410, 180));

        jLabel3.setText("Unesi dimenzije \"matrice\" (redaka X stupaca) :");
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 300, -1, -1));

        getContentPane().add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 300, 30, -1));

        jLabel4.setText("X");
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 300, -1, -1));

        getContentPane().add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 300, 30, -1));

        jLabel5.setText("Broj najfrekventnijih bigrama u parovima redaka:");
        getContentPane().add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 330, -1, -1));

        jTextArea2.setBackground(new java.awt.Color(230, 228, 228));
        jScrollPane2.setViewportView(jTextArea2);

        getContentPane().add(jScrollPane2, new org.netbeans.lib.awtextra.AbsoluteConstraints(12, 362, 410, 130));

        jButton1.setBackground(new java.awt.Color(255, 0, 0));
        jButton1.setText("Click!");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(300, 330, -1, -1));

        pack();
    }//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        String bigrami[] ={"AK","AN","AS","AT","AV","CI","DA","ED","EN","IC","IJ","IN","IS","JA","JE","KA","KO","LI","NA","NE","NI","NO" +
        "OD","OJ","OS","OV","PO","PR","RA","RE","RI","ST","TA","TI","VA","ZA"};
        
        int brRedaka=Integer.parseInt(jTextField1.getText());
        int brStupaca=Integer.parseInt(jTextField2.getText());
        
        String sifrat=sifratTF.getText();
        sifrat=sifrat.trim();
        sifrat=sifrat.toUpperCase();
        
        String stupci[] = new String[brStupaca];
        int tmp=0;
        for(int i=0;i<brStupaca;i++)
        {
            stupci[i]=sifrat.substring(tmp,(i+1)*brRedaka);
            tmp=(i+1)*brRedaka;
        }
        //stvorili smo stupce, te sada treba prebrojati bigrame
        StringBuffer prefix=new StringBuffer(); //za ljepsi ispis
        for(int i=0;i<brStupaca-1;i++)
        {
            prefix.append("   ");
            jTextArea2.append(prefix.toString());
            for(int j=i+1;j<brStupaca;j++)
            {
                //ovdje smo izabrali stupce, sada treba prebrojati koliko ima
                //u toj kombinaciji stupaca najfrekventnijih bigrama
                int br=0;
             
                for(int k=0;k<brRedaka;k++)
                {
                    String t=Character.toString(stupci[i].charAt(k))+
                    Character.toString(stupci[j].charAt(k));//trenutni bigram iz kombinacije stupaca
                    
                    int l=0;
                    while(l<bigrami.length)
                    {
                        if(bigrami[l].equals(t)) 
                        {
                            br++;
                            break;
                        }
                        else l++;
                    }
                 }
                jTextArea2.append(br+"  ");
            }
            jTextArea2.append("\n");
        }
        
        //sada za gornji trokut
        jTextArea2.append("\n\n'donji trokut': \n");
        for(int i=1;i<brStupaca;i++)
        {
            
            //prefix.append("   ");
            //jTextArea2.append(prefix.toString());
            for(int j=0;j<i;j++)
            {
                //ovdje smo izabrali stupce, sada treba prebrojati koliko ima
                //u toj kombinaciji stupaca najfrekventnijih bigrama
                int br=0;
             
                for(int k=0;k<brRedaka;k++)
                {
                    String t=Character.toString(stupci[i].charAt(k))+
                    Character.toString(stupci[j].charAt(k));//trenutni bigram iz kombinacije stupaca
                    
                    int l=0;
                    while(l<bigrami.length)
                    {
                        if(bigrami[l].equals(t)) 
                        {
                            br++;
                            break;
                        }
                        else l++;
                    }
                 }
                jTextArea2.append(br+"  ");
            }
            jTextArea2.append("\n");
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startButtonActionPerformed
        //prvo cemo dohvatiti duljinu sifrata te faktorizirati tu duljinu na 2 faktora
        // zatim napraviti kvadratican raspored slova iz sfrata u pravokutnik tih dimenzija
        
        String sifrat = sifratTF.getText();
        sifrat=sifrat.trim();
        int d = sifrat.length()/2;
        jTextArea1.append("Duljina sifrata je: "+sifrat.length()+"\n");
       
        for(int i=2;i<d;i++)
        {
            if(sifrat.length()%i==0)
            {
                //znaci duljina je djeljiva s 'i' pa mozemo faktorizirati
                jTextArea1.append("\ndimenzije pravokutnika: "+i+" X "+(sifrat.length()/i)+"\nRaspored:\n");
                //sad cemo ispisati raspored za pravokutnik a X b, a nakon toga za pravokutnik b X a
                //slova sifrata upisujemo po stupcima
                //'i' je broj redaka, a 'sifrat.length()/i' je broj stupaca
                
                for(int j=0;j<i;j++)
                {
                    StringBuffer redak = new StringBuffer();
                    int k=j;
                    
                    while(k<sifrat.length())
                    {
                        redak.append(sifrat.charAt(k));
                        k=k+i;
                    }
                    //sada kada smo stvorili jedan redak, trebamo izbrojiti 
                    //omjer samoglasnika i suglasnika te sve to ispisati na potrebno mjesto
                    
                    jTextArea1.append(redak.toString()+"  "+omjerSamISug(redak.toString())+"\n");
                    
                }
                 //sad jos sve to trebamo napraviti za transopnirane pravokutnike (b X a)
                //sad je 'sifrat.length()/i' broj radaka, a 'i' je broj stupaca
                
                jTextArea1.append("\ndimenzije pravokutnika"+sifrat.length()/i+"X"+i+"\nRaspored:\n");
                for(int l=0;l<sifrat.length()/i;l++)
                {
                    StringBuffer redak = new StringBuffer();
                    int m=l;
                    
                    while(m<sifrat.length())
                    {
                        redak.append(sifrat.charAt(m));
                        m=m+(sifrat.length()/i);
                    }
                    //sada kada smo stvorili jedan redak, trebamo izbrojiti 
                    //omjer samoglasnika i suglasnika te sve to ispisati na potrebno mjesto
                    
                    jTextArea1.append(redak.toString()+"  "+omjerSamISug(redak.toString())+"\n");
                }
            }
        }
    }//GEN-LAST:event_startButtonActionPerformed
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
        System.exit(0);
    }//GEN-LAST:event_exitForm
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new DeTau().show();
    }
    
    private String omjerSamISug(String x)
    {
        int brSam=0;//broj samoglsnika u stringu x
        int brSug=0;//broj suglasnika u stringu x
        
        x=x.toUpperCase();
        
        
        for(int i=0;i<x.length();i++)
        {
            char c= x.charAt(i);
            if(Character.isLetter(c))
            {
                //ako je rijec o slovu idemo dalje
                
                if(c=='A'||c=='E'||c=='I'||c=='O'||c=='U') brSam++;
                else brSug++;
            }
        }
        
        int brSamPostotak=(int)((brSam/(float)x.length())*100);
        int brSugPostotak=(int)((brSug/(float)x.length())*100);
        
        return(brSamPostotak+1+":"+brSugPostotak+" >> "+((float)brSam)/brSug);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextArea jTextArea2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField sifratTF;
    private javax.swing.JButton startButton;
    // End of variables declaration//GEN-END:variables
    
}
