import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class AnketAnalizBeraber {

    public static String[] soruMetinleri = {
            "Menü seçimi ve yemek çeşitlerinin uygunluğu",
            "Yemeklerin sunuluş biçimi",
            "Yemeklerin lezzeti",
            "Yemeklerin sıcaklığı",
            "Yemeklerin miktarı",
            "Restoran personelinin davranışı",
            "Servisin kalitesi",
            "Temizlik ve hijyen kurallarına uyum",
            "Restoranımızı tavsiye eder misiniz?"
    };

    private static int[][] cevapSayilari = new int[soruMetinleri.length][3];
    private static int erkekSayisi = 0;
    private static int kadinSayisi = 0;
    
    private static JLabel isimLabel;
	private static JLabel yasLabel;
	private static JLabel cinsiyetLabel;
	
    private static JTextField fieldIsim;
    private static JTextField fieldYas;
    
    private static JRadioButton[] cinsiyetSecenekleri;
    private static JRadioButton[][] soruSecenekleri;

    public AnketAnalizBeraber() {

        JFrame frame = new JFrame();
        frame.setTitle("Restoran Memnuniyet Anketi ve Analiz JMenu | Java Blaclboard [155]");
        frame.setLayout(null);
        
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");

        JMenuItem anketItem = new JMenuItem("Anket");
        JMenu bosItem = new JMenu("Boş");  // File altında sağa açılır menü oluşturacak.
        JMenuItem analizItem = new JMenuItem("Analiz");
        JMenuItem exitItem = new JMenuItem("Exit");
        
         
        
        fileMenu.add(anketItem);
        fileMenu.add(bosItem);
        fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane
        fileMenu.add(analizItem);
        fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane
        fileMenu.add(exitItem);

        menuBar.add(fileMenu);


        JPanel anaPanel = new JPanel();
        anaPanel.setLayout(null);
        anaPanel.setBackground(new Color(156, 190, 196));
        anaPanel.setBounds(30, 30, 1000, 540);
        
        anaPanel.add(anketPaneli());
        
        // ActionListener ekleyerek "anketItem" menü öğesine tıklanınca çağrılacak metod
        anketItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                
            	anaPanel.removeAll();
            	
            	anaPanel.add(anketPaneli());
            	
            	anaPanel.repaint();
            	
            }
        });
        
        // ActionListener ekleyerek "analizItem" menü öğesine tıklanınca çağrılacak metod
        analizItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                
            	anaPanel.removeAll();
            	
            	anaPanel.add(analizPaneli());
            	
            	anaPanel.repaint();
            	
            }
        });
        
        exitItem.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		
        		// Yöntem 1 -> Uygulamayi kapatir.
        		System.exit(0);
        		
        		// Yöntem 2 -> belirli bir JFrame'in kapatılmasını sağlar.
        	//	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //  frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

        	}
        });
        
        frame.add(anaPanel);
        
        frame.setJMenuBar(menuBar);

        frame.setSize(1060, 640);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static JPanel anketPaneli() {
    	JPanel anketPaneli = new JPanel();
    	anketPaneli.setLayout(null);
    	anketPaneli.setBackground(new Color(230, 225, 195));
    	anketPaneli.setBounds(5, 5, 990, 530);
    	
        // Giriş formu bileşenleri
    	isimLabel = new JLabel("İsim:");
    	isimLabel.setBounds(20, 20, 100, 30);
    	
        fieldIsim = new JTextField();
        fieldIsim.setBounds(120, 20, 200, 30);
       
        yasLabel = new JLabel("Yaş:");
    	yasLabel.setBounds(20, 50, 100, 30);
    	
        fieldYas = new JTextField();
        fieldYas.setBounds(120, 50, 200, 30);
        
        cinsiyetLabel = new JLabel("Cinsiyet:");
        cinsiyetLabel.setBounds(20, 80, 100, 30);
        
        ButtonGroup cinsiyetGrubu = new ButtonGroup();
        cinsiyetSecenekleri = new JRadioButton[]{
                new JRadioButton("Erkek"),
                new JRadioButton("Kadın")
                
        };
        
        int cinsiyetX = 120;
        int cinsiyetIndex = 0;
        
        for (JRadioButton radio : cinsiyetSecenekleri) {
        	
        	cinsiyetGrubu.add(radio);
            cinsiyetSecenekleri[cinsiyetIndex].setBounds(cinsiyetX, 80, 100, 30);
            
            anketPaneli.add(radio);
            cinsiyetIndex++;
            cinsiyetX+=100;
        }

        // Anket formu bileşenleri
        soruSecenekleri = new JRadioButton[soruMetinleri.length][3];
        JLabel[] soruLabel = new JLabel[soruMetinleri.length];
        
        int soruY = 110;
        int soruFark = 30;
        
        for (int i = 0; i < soruMetinleri.length; i++) {
        	
        	soruLabel[i] = new JLabel((i + 1) + ". " + soruMetinleri[i]);
        	soruLabel[i].setBounds(20, soruY, 400, 30);
        	anketPaneli.add(soruLabel[i]);
        	
            ButtonGroup soruGrubu = new ButtonGroup();
            for (int j = 0; j < 3; j++) {
                soruSecenekleri[i][j] = new JRadioButton(getSecenekMetni(j));
                soruSecenekleri[i][j].setBounds(420+(100*j), soruY, 100, 30);
                
                soruGrubu.add(soruSecenekleri[i][j]);
                anketPaneli.add(soruSecenekleri[i][j]);
            }
            
            soruY+=soruFark;
        }

        // Bitir düğmesi
        JButton butonBitir = new JButton("Bitir");
        butonBitir.setBounds(20, soruY, 100, 30);
        
        butonBitir.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                anketiKaydet();
            }
        });
        
        anketPaneli.add(isimLabel);
        anketPaneli.add(fieldIsim);
        anketPaneli.add(yasLabel);
        anketPaneli.add(fieldYas);
        anketPaneli.add(cinsiyetLabel);
        
        anketPaneli.add(butonBitir);
        
        return anketPaneli;
    }

    private static String getSecenekMetni(int indeks) {
        switch (indeks) {
            case 0:
                return "Çok İyi";
            case 1:
                return "İyi";
            case 2:
                return "Kötü";
            default:
                return "";
        }
    }

    private static void anketiKaydet() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("src/Anket.txt", true))) {
            
        	String isimYasCinsiyet = fieldIsim.getText() + "," + fieldYas.getText() + ","+ secilenCinsiyet();
        	String cevap = "";

            for (int i = 0; i < soruMetinleri.length; i++) {
            	 cevap = cevap + "," + secilenSoruCevabi(soruSecenekleri[i]);
            }
            
            writer.write(isimYasCinsiyet + cevap + "\n");
            
            JOptionPane.showMessageDialog(null, "Anket başarıyla kaydedildi!");
        } catch (IOException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Anket kaydedilirken bir hata oluştu.");
        }
    }

    private static String secilenCinsiyet() {
        for (JRadioButton radio : cinsiyetSecenekleri) {
            if (radio.isSelected()) {
                return radio.getText();
            }
        }
        return "Cinsiyet seçilmedi";
    }

    private static String secilenSoruCevabi(JRadioButton[] secenekler) {
        for (JRadioButton radio : secenekler) {
            if (radio.isSelected()) {
                return radio.getText();
            }
        }
        return "-1";
    }
    
    
    public static JPanel analizPaneli() {
    	
    	JPanel anketPaneli = new JPanel();
        anketPaneli.setLayout(null);
        anketPaneli.setBackground(new Color(230, 225, 195));
        anketPaneli.setBounds(5, 5, 990, 530);
        
        Font font = new Font("Ubuntu", Font.PLAIN, 29);
        
        // Anket.txt dosyasi her seferinde bastan okundugu için
        // variable degerlerini SIFIRLIYORUZ.
        erkekSayisi = 0;
    	kadinSayisi = 0;
    	
    	for(int i = 0 ; i< soruMetinleri.length ; i++) {
    		for (int j = 0 ; j < 3 ; j++) {
        		cevapSayilari[i][j] = 0;
    		}
    	}
    
        String[] anketDizisi = analizYap("src/Anket.txt");
        
        JLabel[] labelVeriInfo = new JLabel[anketDizisi.length+1];
        labelVeriInfo[0] = new JLabel("Erkek " + erkekSayisi + " Kadın " + kadinSayisi);
        labelVeriInfo[0].setFont(font);
        labelVeriInfo[0].setBounds(30, 30, 960, 50);
        
        anketPaneli.add(labelVeriInfo[0]);
        
        for (int i=0 ; i < anketDizisi.length ; i++) {
        	
    	//	System.out.println(anketDizisi[i] + "\n");

            labelVeriInfo[i]=new JLabel(anketDizisi[i]);
            labelVeriInfo[i].setFont(font);
            labelVeriInfo[i].setBounds(30, 80+(i*45), 960, 50);
            
            anketPaneli.add(labelVeriInfo[i]);
            
        }
		return anketPaneli;

    }
    public static String[] analizYap(String dosyaYolu) {
        try (BufferedReader okuyucu = new BufferedReader(new FileReader(dosyaYolu))) {

            String satir;

            while ((satir = okuyucu.readLine()) != null) {

                String[] parcalar = satir.split(",");
                
                // Cinsiyeti kontrol et
                if (parcalar[2].equals("Erkek")) {
                    erkekSayisi++;
                } else if (parcalar[2].equals("Kadın")) {
                    kadinSayisi++;
                }
                
                // Cevaplari al
                for (int i = 3; i < parcalar.length; i++) {
                    if (parcalar[i].equals("Çok İyi")) {
                        cevapSayilari[i - 3][0]++;
                    } else if (parcalar[i].equals("İyi")) {
                        cevapSayilari[i - 3][1]++;
                    } else if (parcalar[i].equals("Kötü")) {
                        cevapSayilari[i - 3][2]++;
                    }
                }

            }

            // Sonuçları oluştur
            String[] sonuclar = new String[soruMetinleri.length];
            
            for (int i = 0; i < soruMetinleri.length; i++) {
                sonuclar[i] = String.format("%s: %d çok iyi, %d iyi, %d kötü",
                        soruMetinleri[i], cevapSayilari[i][0], cevapSayilari[i][1], cevapSayilari[i][2]);
            }

            return sonuclar;

        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        new AnketAnalizBeraber();
    }
}
