/*
 * Java Sınıf Takip Asistanı v2.0
 * 
 * Java Blackboard YouTube kanali üzerinden yayinlandi : Ekim / 2023
 * 
 * Bu kodlar GPL altında yayınlanan bir Java yazılımıdır.
 * GPL-3.0-or-later olarak lisanslanmistir.
 * 
 * CC BY-NC-SA Atıf-GayriTicari-AynıLisanslaPaylaş (Attribution-NonCommercial-ShareAlike)
 * 
 */


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
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;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class JavaSinifAsistani {
	
	public static JPanel anaPanel;
	public static String okulIlIlce = "KADIKÖY";
	public static String okulAdiBirinciSatir = "JAVA BLACKBOARD";
	public static String okulAdiIkinciSatir = "ORTA OKULU";
	public static String[] sinif = { "5/A", "5/B", "6/A" };
	
	public static String[][] tamListe;
	public static String[][] listeSube5A;
	public static String[][] listeSube5B;
	public static String[][] listeSube6A;
	
	public static JLabel labelOgrenciResmi;
	
	public static int subeMevcudu5A;
	public static int subeMevcudu5B;
	public static int subeMevcudu6A;
	
	public static int anaPanelYukseklik = 2500;

	public JavaSinifAsistani() {
		
		JFrame frame = new JFrame("Java Sınıf Takip Asistanı v2.0 | Java Blackboard [140]");
		frame.setLayout(null);
		
		anaPanel = new JPanel();
		anaPanel.setLayout(null);
		anaPanel.setBackground(background("anaPanel"));
		anaPanel.setPreferredSize(new Dimension(900, anaPanelYukseklik));
		
		anaPanel.add(menuPaneli());
		anaPanel.add(okulTabelaPaneli());
		anaPanel.add(icerikPaneli());
		
		JScrollPane anaPanelScroll = new JScrollPane(anaPanel);
		anaPanelScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		anaPanelScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		anaPanelScroll.setBounds(50, 50, 900, 600);
		
		frame.add(anaPanelScroll);
		
		frame.setSize(1000, 722);
		frame.setLocationRelativeTo(null);
		frame.getContentPane().setBackground(background("frame"));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setVisible(true);
	}
	
	public static JPanel okulTabelaPaneli() {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(background("logoPaneli"));
		panel.setBounds(190, 20, 670, 150);
		
		// Bos okul tabelasini ImageIcon'a ekliyoruz.
		ImageIcon okulTabelaIcon = new ImageIcon("src/images/KadikoyJavaBlackboardOrtaOkulu.jpg");
        
        // JLabel'a bos tabelanin ImageIcon'unu ekleyelim
        JLabel labelOkulAdiTabela = new JLabel(okulTabelaIcon);
        labelOkulAdiTabela.setBounds(0, 0, 670, 150);
        
        JLabel labelOkulIlIlce = new JLabel(okulIlIlce);
        labelOkulIlIlce.setFont(font("labelOkulIlIlce"));
        labelOkulIlIlce.setBounds(160, 20, 510, 35);

        JLabel labelOkulAdi = new JLabel(okulAdiBirinciSatir);
        labelOkulAdi.setFont(font("labelOkulAdi"));
        labelOkulAdi.setBounds(160, 65, 510, 35);
        
        JLabel labelOkulAdi2 = new JLabel(okulAdiIkinciSatir);
        labelOkulAdi2.setFont(font("labelOkulAdi"));
        labelOkulAdi2.setBounds(160, 95, 510, 35);
		
		panel.add(labelOkulIlIlce);
		panel.add(labelOkulAdi);	
		panel.add(labelOkulAdi2);	
		panel.add(labelOkulAdiTabela);
		
		return panel;
		
	}
	
	public static JPanel menuPaneli() {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(background("menuPaneli"));
		panel.setBounds(20, 20, 150, 400);
		
		int startX = 10;
		int startY = 20;
		int x = startX;
		int y = startY;
		int genislik = 130;
		int yukseklik = 30;
		int farkX = 0;
		int farkY = 35;
		
		JButton butonOgrenciKayit = new JButton("Öğrenci Kayıt");
		butonOgrenciKayit.setBounds(x, y, genislik, yukseklik);
		y = y + farkY;
		
		JButton butonListe5A = new JButton("5/A Liste");
		butonListe5A.setBounds(x, y, genislik, yukseklik);
		y = y + farkY;
		
		JButton butonListe5B = new JButton("5/B Liste");
		butonListe5B.setBounds(x, y, genislik, yukseklik);
		y = y + farkY;
		
		JButton butonListe6A = new JButton("6/A Liste");
		butonListe6A.setBounds(x, y, genislik, yukseklik);
		y = y + farkY;
		
		
		butonOgrenciKayit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				anaPanel.removeAll();
				
				anaPanel.add(menuPaneli());
				anaPanel.add(okulTabelaPaneli());
				anaPanel.add(icerikPaneli("ogrenciKayit"));
				
				anaPanel.repaint();
				anaPanel.revalidate();
				
			}
		});
		
		butonListe5A.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				anaPanel.removeAll();
				
				anaPanel.add(menuPaneli());
				anaPanel.add(okulTabelaPaneli());
				anaPanel.add(icerikPaneli(0));
				
				anaPanel.repaint();
				anaPanel.revalidate();
				
			}
		});
		
		butonListe5B.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				anaPanel.removeAll();
				
				anaPanel.add(menuPaneli());
				anaPanel.add(okulTabelaPaneli());
				anaPanel.add(icerikPaneli(1));
				
				anaPanel.repaint();
				anaPanel.revalidate();
				
			}
		});
		
		butonListe6A.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				anaPanel.removeAll();
				
				anaPanel.add(menuPaneli());
				anaPanel.add(okulTabelaPaneli());
				anaPanel.add(icerikPaneli(2));
				
				anaPanel.repaint();
				anaPanel.revalidate();
				
			}
		});
		
		panel.add(butonOgrenciKayit);
		
		panel.add(butonListe5A);
		
		panel.add(butonListe5B);
		
		panel.add(butonListe6A);
		
		return panel;
	}
	
	public static JPanel icerikPaneli() {
		
		// Uygulama ilk çalistiginda bos gelen içerik paneli.
		// Belki bir karsilama mesaji olabilir :)
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(background("icerikPaneli"));
		panel.setBounds(190, 190, 670, 400);
		
		return panel;
	}
	
	public static JPanel icerikPaneli(String ogrenciKayit) {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(background("icerikPaneli"));
		panel.setBounds(190, 190, 670, 500);
		
		int startX = 20;
		int startY = 20;
		int x = startX;
		int y = startY;
		int genislikLabel = 150;
		int genislikButon = 100;
		int genislikField = 350;
		int yukseklik = 35; 
		int farkX = 10;
		int farkY = 40;
		
		// Resmi bir JLabel içinde görüntüleyelim
        labelOgrenciResmi = new JLabel(vesikalik105x135 ("src/images/defaultOgrenciVesikalik.jpg"));
        labelOgrenciResmi.setBounds(550, 20, 105, 135);
		
		// Sınıf, ad, soyad, öğrenci numarası gibi bilgilerin alinmasi burada yapilacak.
		JLabel labelSinif = new JLabel("Öğrencinin Sınıfı:");
		labelSinif.setFont(font("labelRegular"));
		labelSinif.setHorizontalAlignment(JLabel.RIGHT);
		labelSinif.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		
		JComboBox comboSinif = new JComboBox(sinif);
		comboSinif.setFont(font("labelRegular"));
		comboSinif.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelOgrenciNo = new JLabel("Öğrenci No:");
		labelOgrenciNo.setFont(font("labelRegular"));
		labelOgrenciNo.setHorizontalAlignment(JLabel.RIGHT);
		labelOgrenciNo.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		JTextField fieldOgrenciNo = new JTextField();
		fieldOgrenciNo.setFont(font("labelRegular"));
		fieldOgrenciNo.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelOgrenciAdi = new JLabel("Öğrenci Adı:");
		labelOgrenciAdi.setFont(font("labelRegular"));
		labelOgrenciAdi.setHorizontalAlignment(JLabel.RIGHT);
		labelOgrenciAdi.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		
		JTextField fieldOgrenciAdi = new JTextField();
		fieldOgrenciAdi.setFont(font("labelRegular"));
		fieldOgrenciAdi.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelOgrenciSoyadi = new JLabel("Öğrenci Soyadı:");
		labelOgrenciSoyadi.setFont(font("labelRegular"));
		labelOgrenciSoyadi.setHorizontalAlignment(JLabel.RIGHT);
		labelOgrenciSoyadi.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		JTextField fieldOgrenciSoyadi = new JTextField();
		fieldOgrenciSoyadi.setFont(font("labelRegular"));
		fieldOgrenciSoyadi.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelResimSec = new JLabel("Öğrenci Resmi:");
		labelResimSec.setFont(font("labelRegular"));
		labelResimSec.setHorizontalAlignment(JLabel.RIGHT);
		labelResimSec.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		// Vesikalik için dosya seçiciyi oluşturuyoruz  
        JFileChooser fileChooser = new JFileChooser();
        
        // İlk açılışta masaüstünü varsayılan dizin olarak ayarlayalım
        // ama vesikalik fotograflarin hepsi de src/images/vesikalik klasoru içinde olsun.
        // vesikalik klasoru içinden resim seçin.
        // Lunux Mac OS X ve Windows isletim sistemlerinde dosya yollari farkli olacagi için
        // proje içinden bir klasor gosterdik simdilik.
        String desktopPath = System.getProperty("user.home") + File.separator + "Desktop" ;
        fileChooser.setCurrentDirectory(new File(desktopPath));

        // Dosya seçiciyi açma düğmesi
        JButton butonResimSec = new JButton("Resim Seç");
        butonResimSec.setFont(font("labelRegular"));
        butonResimSec.setBounds(x, y, genislikButon, yukseklik);
        x = x + genislikButon + 10;
        
        JTextField fieldDosyaAdi = new JTextField("dosyaAdi.jpg");
        fieldDosyaAdi.setEditable(false);
        fieldDosyaAdi.setFont(font("labelRegular"));
        // Metin rengini GRI ayarlayalim ki editible FALSE oldugu anlasilsin.
        fieldDosyaAdi.setForeground(Color.GRAY);
        fieldDosyaAdi.setBounds(x, y, genislikField-(genislikButon+10), yukseklik);
        x = startX;
    	y = y + farkY;
    	
    	JLabel labelOgrenciDogumYili = new JLabel("Öğrenci Doğum Yılı:");
    	labelOgrenciDogumYili.setFont(font("labelRegular"));
    	labelOgrenciDogumYili.setHorizontalAlignment(JLabel.RIGHT);
    	labelOgrenciDogumYili.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		String[] yil = {"2008" ,"2009", "2010", "2011", "2012"};
		
		JComboBox comboOgrenciDogumYili = new JComboBox(yil);
		comboOgrenciDogumYili.setFont(font("labelRegular"));
		comboOgrenciDogumYili.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelOgrenciCinsiyet = new JLabel("Öğrencinin Cinsiyeti:");
		labelOgrenciCinsiyet.setFont(font("labelRegular"));
		labelOgrenciCinsiyet.setHorizontalAlignment(JLabel.RIGHT);
		labelOgrenciCinsiyet.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		String[] cinsiyet = {"Erkek", "Kız"};
		
		JComboBox comboCinsiyet = new JComboBox(cinsiyet);
		comboCinsiyet.setFont(font("labelRegular"));
		comboCinsiyet.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelEpostaAdresi = new JLabel("Öğrenci Eposta:");
		labelEpostaAdresi.setFont(font("labelRegular"));
		labelEpostaAdresi.setHorizontalAlignment(JLabel.RIGHT);
		labelEpostaAdresi.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		JTextField fieldEpostaAdresi = new JTextField();
		fieldEpostaAdresi.setFont(font("labelRegular"));
		fieldEpostaAdresi.setBounds(x, y, genislikField, yukseklik);
		x = startX;
		y = y + farkY;
		
		JLabel labelTelefonNumarasi = new JLabel("Öğrenci Telefon:");
		labelTelefonNumarasi.setFont(font("labelRegular"));
		labelTelefonNumarasi.setHorizontalAlignment(JLabel.RIGHT);
		labelTelefonNumarasi.setBounds(x, y, genislikLabel, yukseklik);
		x = startX + farkX + genislikLabel;
		
		JTextField fieldTelefonNumarasi = new JTextField();
		fieldTelefonNumarasi.setFont(font("labelRegular"));
		fieldTelefonNumarasi.setBounds(x, y, genislikField, yukseklik);
	//	x = startX;
		y = y + farkY + 10;  // Son buton için 10 fark ekledik.
    	
    	JButton butonKaydet = new JButton("Kaydet");
		butonKaydet.setFont(font("labelRegular"));
		butonKaydet.setBounds(x, y, genislikButon, yukseklik);
    		
        butonResimSec.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                
            	panel.remove(labelOgrenciResmi);
            	
            	String secilenDosyaYolu = "src/images/hata.jpg";
            	
            	int returnValue = fileChooser.showOpenDialog(null);

                // Kullanıcı bir dosya seçtiyse
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    // Seçilen dosyanın yolunu alın
                    secilenDosyaYolu = fileChooser.getSelectedFile().getPath();
                                        
                    // Burada seçilen dosya yolu ile ne yapmak istiyorsanız yapabilirsiniz
                    // Örneğin, bu yolu öğrenci bilgilerine bağlayabilirsiniz.
                    
                 // Burada seçilen dosya türünü kontrol edin (örneğin, .jpg)
                    if (secilenDosyaYolu.toLowerCase().endsWith(".jpg")) {
                        // Seçilen dosya bir .jpg ise, resmi görüntüleyin
                        labelOgrenciResmi.setIcon(vesikalik105x135(secilenDosyaYolu));
                        
                        File secilenDosya = new File(secilenDosyaYolu);
                        String vesikalikDosyaAdi = secilenDosya.getName();
                        fieldDosyaAdi.setText(vesikalikDosyaAdi);
                                                
                    } else {
                        // Seçilen dosya .jpg değilse, hata mesajı görüntüleyin ve varsayılan resmi gösterin
                        labelOgrenciResmi.setIcon(vesikalik105x135("src/images/hata.jpg"));
                        JOptionPane.showMessageDialog(null, "Geçersiz dosya türü! Sadece .jpg dosyaları desteklenir.", "Hata", JOptionPane.ERROR_MESSAGE);
                    }
                    
                    panel.add(labelOgrenciResmi);
                    
                    panel.revalidate();
                    panel.repaint();
                
                } else {
                	
                	labelOgrenciResmi.setIcon(vesikalik105x135 (secilenDosyaYolu));
                    
                    panel.add(labelOgrenciResmi);
                    
                    panel.revalidate();
                    panel.repaint();
                	
                }
                
                
            }
        });
    	
		butonKaydet.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				
				// Ögrenci bilgileri
				String infoSinif = (String) comboSinif.getSelectedItem();
				String infoNo = fieldOgrenciNo.getText();
				String infoAdi = fieldOgrenciAdi.getText();
				String infoSoyadi = fieldOgrenciSoyadi.getText();
				String infoVesikalik = fieldDosyaAdi.getText();
				String infoDogumyili = (String) comboOgrenciDogumYili.getSelectedItem();
				String infoCinsiyet = (String) comboCinsiyet.getSelectedItem();
				String infoEposta = fieldEpostaAdresi.getText();
				String infoTelefon = fieldTelefonNumarasi.getText();
				
				String formInfo = infoSinif + "," + infoNo + "," + infoAdi + "," + infoSoyadi + ","
						+ infoVesikalik + "," + infoDogumyili + "," + infoCinsiyet + ","
						+ infoEposta + "," + infoTelefon + "\n";
				
				try {
					
				    FileWriter dosyaOgrenciBilgileri = new FileWriter("src/data/ogrenciBilgileri.txt", true);
				    BufferedWriter dosyaKayit = new BufferedWriter(dosyaOgrenciBilgileri);

				    // Öğrenci bilgilerini dosyaya yazalım
				    dosyaKayit.write(formInfo);

				    dosyaKayit.close();
				    
				} catch (IOException ex) {
					
				    ex.printStackTrace();
				
				}

				comboSinif.setSelectedIndex(0);
				fieldOgrenciNo.setText("");
				fieldOgrenciAdi.setText("");
				fieldOgrenciSoyadi.setText("");
				fieldDosyaAdi.setText("");
				comboOgrenciDogumYili.setSelectedIndex(0);
				comboCinsiyet.setSelectedIndex(0);
				fieldEpostaAdresi.setText("");
				fieldTelefonNumarasi.setText("");
				
			}
			
		});
		
		
		panel.add(labelOgrenciResmi);
		
		panel.add(labelOgrenciNo);
		panel.add(fieldOgrenciNo);
		
		panel.add(labelSinif);
		panel.add(comboSinif);
		
		panel.add(labelOgrenciAdi);
		panel.add(fieldOgrenciAdi);
		
		panel.add(labelOgrenciSoyadi);
		panel.add(fieldOgrenciSoyadi);
		
		panel.add(labelResimSec);
		panel.add(butonResimSec);
		panel.add(fieldDosyaAdi);
		
		panel.add(labelOgrenciDogumYili);
		panel.add(comboOgrenciDogumYili);
		
		panel.add(labelOgrenciCinsiyet);
		panel.add(comboCinsiyet);
		
		panel.add(labelEpostaAdresi);
		panel.add(fieldEpostaAdresi);
		
		panel.add(labelTelefonNumarasi);
		panel.add(fieldTelefonNumarasi);
		
		panel.add(butonKaydet);
		
		
		return panel;
	}
	
	// integer deger alip ilgili sinifin ogrenci listesini gosterecegiz.
	// parametre : 0 - 5/A
	// parametre : 1 - 5/B
	// parametre : 2 - 6/A
	public static JPanel icerikPaneli(int sinif) {
		
		String sube = "";
		int mevcudiyet = 0;
		String[][] ilgiliSinifListesi = null;
		
		int txtSatirSayisi = txtSatirSayisi();
		
		tamListe = new String[txtSatirSayisi][9];
		tamListe = toplamUcSinifListesi();
		
		subeMevcudu5A = subeMevcudu("5/A");
		subeMevcudu5B = subeMevcudu("5/B");
		subeMevcudu6A = subeMevcudu("6/A");
		
		// Subelerin kendi listelerini tamListe dizisinden ayikliyoruz.
		listeSube5A = new String[subeMevcudu5A][9];
		listeSube5A = subeListesi(0);
		
		listeSube5B = new String[subeMevcudu5B][9];
		listeSube5B = subeListesi(1);
		
		listeSube6A = new String[subeMevcudu6A][9];
		listeSube6A = subeListesi(2);
		
		switch (sinif) {
		
		case 0 : 
			sube = "5/A";
			mevcudiyet = subeMevcudu5A;
			ilgiliSinifListesi = new String[mevcudiyet][9];
			ilgiliSinifListesi = listeSube5A;
			break;
		
		case 1 :
			sube = "5/B";
			mevcudiyet = subeMevcudu5B;
			ilgiliSinifListesi = new String[mevcudiyet][9];
			ilgiliSinifListesi = listeSube5B;
			break;
		
		case 2 :
			sube = "6/A";
			mevcudiyet = subeMevcudu6A;
			ilgiliSinifListesi = new String[mevcudiyet][9];
			ilgiliSinifListesi = listeSube6A;
			break;
		
		}

		int mevcut = 0;
		
		if (sinif == 0) mevcut = subeMevcudu5A;
		if (sinif == 1) mevcut = subeMevcudu5B;
		if (sinif == 2) mevcut = subeMevcudu6A;
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(background("icerikPaneli"));
		panel.setBounds(190, 190, 670, anaPanelYukseklik-210);  
		// -210 ile içerik panelinin anaPanelin içinde kalmasini sagliyoruz.
		
		int startX = 20;
		int startY = 20;
		int x = startX;
		int y = startY;
		int genislikLabel = 150;
		int genislikButon = 100;
		int genislikField = 350;
		int yukseklik = 35; 
		int farkX = 10;
		int farkY = 40;
		
		File dosyaSubeKodu = new File("src/images/SinifSube.jpg");
		Image imageYuklenenSubeKodu = null;
		try {
			imageYuklenenSubeKodu = ImageIO.read(dosyaSubeKodu);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		ImageIcon imageIconSubeKodu = new ImageIcon(imageYuklenenSubeKodu);
		JLabel labelSubeKoduTabela = new JLabel(imageIconSubeKodu);
		labelSubeKoduTabela.setBounds(20, 20, 320, 96);
		
		JLabel labelSinifSubeKodu = new JLabel(sube);
		labelSinifSubeKodu.setFont(font("labelSubeKoduTabela"));
		labelSinifSubeKodu.setBounds(50, 42, 100, 50);
		
		JLabel labelSinifMevcudu = new JLabel("Sınıf Mevcudu");
		labelSinifMevcudu.setFont(font("labelSubeMevcuduTabela"));
		labelSinifMevcudu.setHorizontalAlignment(JLabel.CENTER);
		labelSinifMevcudu.setBounds(150, 30, 200, 20);
		
		JLabel labelSinifSubeMevcudu = new JLabel(""+mevcut);
		labelSinifSubeMevcudu.setFont(font("labelSubeKoduTabela"));
		labelSinifSubeMevcudu.setHorizontalAlignment(JLabel.CENTER);
		labelSinifSubeMevcudu.setBounds(150, 50, 200, 50);
				
		// Ogrencilerin vesikalik fotograflarinin yolu
		String vesikalikYolu = "src/images/vesikalik/";
		
		JLabel[] labelOgrenciListesi = new JLabel[mevcudiyet];
		JLabel[] labelOgrenciVesikalik = new JLabel[mevcudiyet];
		JLabel[] labelOgrenciAdSoyad = new JLabel[mevcudiyet];
		JLabel[] labelOgrenciNo = new JLabel[mevcudiyet];
		JLabel[] labelOgrenciInfo = new JLabel[mevcudiyet];
		
		
		for (int i=0 ; i<mevcudiyet ; i++) {
			
			labelOgrenciVesikalik[i] = new JLabel(vesikalik105x135 (vesikalikYolu+ilgiliSinifListesi[i][4]));
			labelOgrenciVesikalik[i].setBounds(20, 130+(i*155), 105, 135);
			
			panel.add(labelOgrenciVesikalik[i]);
			
			labelOgrenciAdSoyad[i] = new JLabel(ilgiliSinifListesi[i][2] + " " + ilgiliSinifListesi[i][3]);
			labelOgrenciAdSoyad[i].setFont(font("labelOgrenciAdSoyad"));
			labelOgrenciAdSoyad[i].setBounds(135, 130+(i*155), 500, 30);
			
			panel.add(labelOgrenciAdSoyad[i]);
			
			labelOgrenciNo[i] = new JLabel(ilgiliSinifListesi[i][1]);
			labelOgrenciNo[i].setFont(font("labelSubeKoduTabela"));
			labelOgrenciNo[i].setBounds(135, 170+(i*155), 105, 50);
			
			panel.add(labelOgrenciNo[i]);
			
			String labelOgrenciInfoSatiri =	ilgiliSinifListesi[i][5] + " / "
											+ ilgiliSinifListesi[i][6] + " / "
											+ ilgiliSinifListesi[i][7] + " / " 
											+ ilgiliSinifListesi[i][8];
			
			labelOgrenciInfo[i] = new JLabel(labelOgrenciInfoSatiri);
			labelOgrenciInfo[i].setFont(font("labelOgrenciInfo"));
			labelOgrenciInfo[i].setBounds(135, 240+(i*155), 500, 30);
			
			panel.add(labelOgrenciInfo[i]);
			
		}
		
        panel.add(labelSinifSubeKodu);
        panel.add(labelSinifMevcudu);
        panel.add(labelSinifSubeMevcudu);
        
        panel.add(labelSubeKoduTabela);
		
		return panel;
	}
	
	public static Font font(String fontAlani) {
		
		Font font = new Font("Ubuntu", Font.PLAIN, 15);
		
		switch (fontAlani) {
		
		case "labelRegular" : 
			font = new Font("Ubuntu", Font.PLAIN, 15);
			break;
		
		case "labelOkulIsmi" : 
			font = new Font("Ubuntu", Font.BOLD, 35);
			break;
		
		case "labelSubeKoduTabela": 
			font = new Font("Ubuntu", Font.BOLD, 55);
			break;
		
		case "labelSubeMevcuduTabela": 
			font = new Font("Ubuntu", Font.PLAIN, 17);
			break;
		
		case "labelOgrenciAdSoyad": 
			font = new Font("Ubuntu", Font.PLAIN, 27);
			break;
		
		case "labelOkulIlIlce":
			font = new Font("Ubuntu", Font.PLAIN, 35);
			break;
			
		case "labelOkulAdi":
			font = new Font("Ubuntu", Font.BOLD, 35);
			break;
		
		case "labelOgrenciInfo":
			font = new Font("Ubuntu", Font.PLAIN, 15);
			break;
		
		}
		
		return font;
	}
	
	public static Color background(String renkAlani) {
		
		Color color = new Color(109, 63, 140);
		
		switch (renkAlani) {
		
		case "frame" : color = new Color(242, 207, 29);
		break;
		
		case "anaPanel" : color = new Color(217, 158, 50);
		break;
		
		case "menuPaneli" : color = new Color(242, 240, 213);
		break;
		
		case "icerikPaneli" : color = new Color(194, 255, 184);
		break;
		
		case "logoPaneli" : color = new Color(133, 211, 242);
		break;
		
		
		
		}
		
		return color;
	}
	
	public static ImageIcon vesikalik105x135 (String dosyaYolu) {
		
		// Bu metod yuklenen vesiklaligin 105x135 pixel olarak
		// yeniden ölçeklendirilmesini saglar.
		// ve resmi ImageIcon olarak return eder..
		File dosyaYuklenenVesikalik = new File(dosyaYolu);
		Image imageYuklenenVesikalik = null;
		try {
			imageYuklenenVesikalik = ImageIO.read(dosyaYuklenenVesikalik);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		int vesikalikGenislik = 105;
        int vesikalikYukseklik = 135;
		Image imageVesiklaik = imageYuklenenVesikalik.getScaledInstance(vesikalikGenislik, vesikalikYukseklik, Image.SCALE_DEFAULT);
        ImageIcon vesikalikSonHali = new ImageIcon(imageVesiklaik);
        
        return vesikalikSonHali;
        
	}
	
	public static int txtSatirSayisi() {
		
		int satir = 0;
		
		// Satir sayisini hesaplayalim.
		try {
			
		    FileReader fileReader = new FileReader("src/data/ogrenciBilgileri.txt");
		    BufferedReader bufferedReader = new BufferedReader(fileReader);

		    String line;
		    
		    while ((line = bufferedReader.readLine()) != null) {
		        
		    	satir++;
		    }

		    bufferedReader.close();
		
		} catch (IOException e) {
		
			e.printStackTrace();
		
		}
		
	//	System.out.println("TXT Satir sayisi = " + satir);
		
		return satir;
	}
	
	// ogrenciBilgileri.txt dosyasini bütün kayitlari Sitring[][] dizi olarak return eder.
	public static String[][] toplamUcSinifListesi() {
		
		String[][] tamListe = new String[txtSatirSayisi()][9];
		
		try {
			
		    FileReader fileReader = new FileReader("src/data/ogrenciBilgileri.txt");
		    BufferedReader bufferedReader = new BufferedReader(fileReader);

		    String line;
		    int satirIndex = 0;
		    
		    while ((line = bufferedReader.readLine()) != null) {
		        
		    	// Satırı virgüllerle bölelim
		        String[] veri = line.split(",");
		        
		        // Verileri ikili String dizisine ekleyelim
		        if (veri.length == 9) { // Ögrenci kayitta 9 sütunumuz vardi
		        	tamListe[satirIndex] = veri;
		            satirIndex++;
		        }
		        
		    }

		    bufferedReader.close();
		} catch (IOException e) {
		    e.printStackTrace();
		}
		
		return tamListe;

	}
	
	// Bu metod integer parametre ile sinifin ogrenci listesini return eder..
	// parametre : 0 -> 5/A
	// parametre : 1 -> 5/B
	// parametre : 2 -> 6/A
	public static String[][] subeListesi(int sinifSube) {
		
		String subeIsmi = "";
		
		switch (sinifSube) {
		
		case 0 : 
			subeIsmi = "5/A";
		break;
		
		case 1 : 
			subeIsmi = "5/B";
		break;
		
		case 2 : 
			subeIsmi = "6/A";
		break;
		
		}
		
		int diziSubeMevcudu = 0;
		
		if (sinifSube  == 0) diziSubeMevcudu = subeMevcudu5A; 
		if (sinifSube  == 1) diziSubeMevcudu = subeMevcudu5B; 
		if (sinifSube  == 2) diziSubeMevcudu = subeMevcudu6A; 
				
		String[][] diziSube = new String[diziSubeMevcudu][9];
		
		int sube = -1;
		
		for (int i=0 ; i<tamListe.length ; i++) {
			
			if (tamListe[i][0].equals(subeIsmi)) {

				sube++;
				
				for (int j=0 ; j<9 ; j++) {
					
					diziSube[sube][j] = tamListe[i][j];
					
				}
			}
			
		}
		
		return diziSube;
		
	}
	
	// Bu metod String parametre ile sinifin ogrenci mevcudunu return eder..
	// parametre : 5/A
	// parametre : 5/B
	// parametre : 6/A
	public static int subeMevcudu(String sube) {
		
		int toplamMevcutOgrenci = txtSatirSayisi();
		int mevcut = 0;
		
		int sube5A = 0;
		int sube5B = 0;
		int sube6A = 0;

		for(int i=0 ; i<toplamMevcutOgrenci ; i ++) {
			
			if (tamListe[i][0].equals("5/A")) sube5A++;
			if (tamListe[i][0].equals("5/B")) sube5B++;
			if (tamListe[i][0].equals("6/A")) sube6A++;
			
		}
        
		
		if (sube.equals("5/A")) mevcut = sube5A;
		if (sube.equals("5/B")) mevcut = sube5B;
		if (sube.equals("6/A")) mevcut = sube6A;

		
		return mevcut;
	}
	
	public static void main(String[] args) {
		
		new JavaSinifAsistani();
		
	}

}
