import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class MailHesap {

	public static String isim;
	public static String soyad;
	
	public static String password;
	public static int passwordLength = 8;
	
	public static String departman;
	public static JComboBox departmanCombo;
	
	public static int mailBoxKapasitesi;
	public static String alternatifMail;
	public static String sirketMailOnEk;
	public static String sirketMailUzantisi = "kesinbisirket.com";
	
	public static JComboBox mailBoxKotaCombo;
	public static JTextField sirketMailTextField;
	public static JTextField sirketMailKotaTextField;
	
	public static JPanel anaPanel = new JPanel();
	
	public static String[] sonucPanelGoster = new String[7];
	
	public MailHesap() {
		
		JFrame frame = new JFrame("Şirket İçi Mail Hesabı Oluşturma TXT Kayıt ve JTable Görüntüleme | Java Blackboard [135]");
		frame.setLayout(null);
		
		anaPanel.setLayout(null);
		anaPanel.setBackground(new Color(217, 217, 217));
		anaPanel.setBounds(50, 50, 900, 500);
		
		sonucPanelGoster[0] = "mailBekleniyor.jpg";
        sonucPanelGoster[1] = "İsim Soyad";
        sonucPanelGoster[2] = "Departman";
        sonucPanelGoster[3] = "Şirket mail";
        sonucPanelGoster[4] = " 0 MB";
        sonucPanelGoster[5] = "Şifre";
        sonucPanelGoster[6] = "Alternatif mail";
		
		anaPanel.add(infoPanel());
		anaPanel.add(sonucPanel(sonucPanelGoster));
		
		frame.add(anaPanel);

		frame.setSize(1000, 622);
		frame.setLocationRelativeTo(null);
		frame.getContentPane().setBackground(new Color(217, 185, 91));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
	
	public static JPanel logoPanel() {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(new Color(140, 28, 3));
		
		ImageIcon icon = new ImageIcon("src/images/sirketLogo.jpg");
		JLabel logoLabel = new JLabel();
		logoLabel.setIcon(icon);
		logoLabel.setBounds(0, 0, 350, 100);
		
		panel.add(logoLabel);
		
		panel.setBounds(25, 25, 350, 100);
		
		return panel;
		
	}
	
	public static JPanel mailOlusturulduPanel(String dosyaIsmi) {
		
		// iki tane dosyamiz var bunlar da duruma gore degisecek
		// 1) mailBekleniyor.jpg  
		// 2) mailOlusturuldu.jpg
				
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(new Color(140, 28, 3));
		
		ImageIcon iconMail = new ImageIcon("src/images/" + dosyaIsmi);
		JLabel mailLabel = new JLabel();
		mailLabel.setIcon(iconMail);
		mailLabel.setBounds(0, 0, 350, 100);
		
		panel.add(mailLabel);
		
		panel.setBounds(25, 25, 350, 100);
		
		return panel;
		
	}
	
	public static JPanel infoPanel() {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(new Color(169, 203, 217));
		
		panel.add(logoPanel());
		
		int xStart = 10;
		int x = xStart;
		int y = 150;
		int xFark = 100;
		int yFark = 30;
		
		int labelGenislik = 150;
		int textFieldGenislik = 280;
		int ortakYukseklik = 30;
		
		
		JLabel isimLabel = new JLabel("İsim : ");
		isimLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField isimTextField = new JTextField();
		isimTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel soyadLabel = new JLabel("Soyad : ");
		soyadLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField soyadTextField = new JTextField();
		soyadTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel passwordLabel = new JLabel("Password : ");
		passwordLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		password = randomPassword();
		JTextField passwordTextField = new JTextField(password);
		passwordTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel departmanLabel = new JLabel("Departman : ");
		departmanLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		String[] departmanIsim = {"Seçiniz", "Fitness", "Satış Pazarlama", "Teknoloji", 
						"Muhasebe", "Güvenlik", "Yiyecek/İçecek", "Müşteri İlişkileri", "Ön Büro"};
		
		departmanCombo = new JComboBox(departmanIsim);
		departmanCombo.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel mailBoxKotasiLabel = new JLabel("Mailbox Kotası : ");
		mailBoxKotasiLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		String[] mailBoxKota = {"Kota Seçiniz", "500 MB", "1 GB", 
						"3 GB", "5 GB", "10 GB"};
		mailBoxKotaCombo = new JComboBox(mailBoxKota);
		mailBoxKotaCombo.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel alternatifMailLabel = new JLabel("Alternatif Mail : ");
		alternatifMailLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField alternatifMailTextField = new JTextField();
		alternatifMailTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart + xFark;
		y = y + (yFark*2);
		
		JButton mailOusturButon = new JButton("Şirket Maili Oluştur");
		mailOusturButon.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart + xFark;
		y = y + yFark;
		
		JButton tablodaGosterButon = new JButton("Mailleri Tabloda Göster");
		tablodaGosterButon.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		
		mailOusturButon.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent e) {
		    	
		    	anaPanel.removeAll();
		    	
		        // Formdan alınan bilgileri kullanarak mail oluşturma işlemi burada yapılabilir.
		        // Örnek olarak:
		        isim = isimTextField.getText();
		        soyad = soyadTextField.getText();
		        departman = (String) departmanCombo.getSelectedItem();
		        int departmanInteger = (int) departmanCombo.getSelectedIndex();
		        
		        switch (departmanInteger) {
		        
		        case 0: sirketMailOnEk = "free";
		        break;
		        case 1: sirketMailOnEk = "sale";
		        break;
		        case 2: sirketMailOnEk = "tech";
		        break;
		        case 3: sirketMailOnEk = "acc";
		        break;
		        case 4: sirketMailOnEk = "sec";
		        break;
		        case 5: sirketMailOnEk = "fb";
		        break;
		        case 6: sirketMailOnEk = "cr";
		        break;
		        case 7: sirketMailOnEk = "fof";
		        break;
		        
		        }
		        
		        int mailBoxKapasitesiInteger = (int) mailBoxKotaCombo.getSelectedIndex();

		        switch (mailBoxKapasitesiInteger) {
		        
		        case 0 : mailBoxKapasitesi = 0;
		        break;
		        case 1 : mailBoxKapasitesi = 500;
		        break;
		        case 2 : mailBoxKapasitesi = 1024;
		        break;
		        case 3 : mailBoxKapasitesi = 3072;
		        break;
		        case 4 : mailBoxKapasitesi = 5120;
		        break;
		        case 5 : mailBoxKapasitesi = 10240;
		        break;
		        }
		  
		        alternatifMail = alternatifMailTextField.getText();

		        // Şirket içi mail oluşturma ve sonuçları gösterme işlemi burada yapılabilir.
		        // Örnek olarak:
		        String sirketMail = isim.toLowerCase() + "." + soyad.toLowerCase() + 
		        								"@" + sirketMailOnEk + "." +sirketMailUzantisi;
		        String sirketMailKota = "" + mailBoxKapasitesi;
		        
		        /*
		        System.out.println("İsim		= " + isim);
		        System.out.println("Soyad		= " + soyad);
		        System.out.println("Departman 	= " + departman);
		        System.out.println("Mail Kota 	= " + mailBoxKapasitesi);
		        System.out.println("Şirket Mail	= " + sirketMail);
		        System.out.println("Mail Kota	= " + sirketMailKota);
		        System.out.println("Alternatif 	= " + alternatifMail);
		        */
		        
		        // Mail formundan geen bilgileri
		        // sonuç paneline gonderiyoruz.
		        sonucPanelGoster[0] = "mailOlusturuldu.jpg";
		        sonucPanelGoster[1] = isim + " " + soyad;  // isim soyad text field.
		        sonucPanelGoster[2] = departman;
		        sonucPanelGoster[3] = sirketMail;
		        sonucPanelGoster[4] = "" + sirketMailKota + " MB";
		        sonucPanelGoster[5] = password;
		        sonucPanelGoster[6] = alternatifMail;
		        
		        anaPanel.add(infoPanel());
		        anaPanel.add(sonucPanel(sonucPanelGoster));
		        
		        anaPanel.revalidate();
		        anaPanel.repaint();
		        
		        // Formdan alınan bilgileri bir metin dosyasına yazdırma
		        try {
		        	
		            FileWriter fileWriter = new FileWriter("src/data/acilanSirketMailBilgileri.txt", true); 
		            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
		            
		            // Bilgileri dosyaya yazdırma
		            bufferedWriter.write("İsim: " + isim);
		            bufferedWriter.newLine(); // Yeni satıra geçmek için
		            bufferedWriter.write("Soyad: " + soyad);
		            bufferedWriter.newLine();
		            bufferedWriter.write("Departman: " + departman);
		            bufferedWriter.newLine();
		            bufferedWriter.write("Şirket Mail: " + sirketMail);
		            bufferedWriter.newLine();
		            bufferedWriter.write("Şirket Mail Kota: " + sirketMailKota + " MB");
		            bufferedWriter.newLine();
		            bufferedWriter.write("Password: " + password);
		            bufferedWriter.newLine();
		            bufferedWriter.write("Alternatif Mail: " + alternatifMail);
		            bufferedWriter.newLine();
			       
		            // Dosyayı kapatma
		            bufferedWriter.close();
		            
		            System.out.println("Bilgiler dosyaya yazıldı.");
		        } catch (IOException ex) {
		            System.err.println("Dosya yazma hatası: " + ex.getMessage());
		        }
		        
		    }
		});

		tablodaGosterButon.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent e) {
		        
		    	anaPanel.removeAll(); // anaPanel'i silip buraya JScrollPane ile bir tablo eklenecek.
		        
		        // TXT dosya yolu : "src/data/acilanSirketMailBilgileri.txt"
		        
		    	String[] columnNames = {"İsim", "Soyad", "Departman", "Şirket Mail", "Mail Kota",
		    			"Password", "Alternatif Mail"}; 
		        
		        String[][] data = sirketMailVerileriniDosyadanOku("src/data/acilanSirketMailBilgileri.txt");
		        
		        JTable mailTable = new JTable(data, columnNames);
		        JScrollPane scrollPane = new JScrollPane(mailTable);

		        // Ana panelin boyutları
		        int anaPanelX = 50;
		        int anaPanelY = 50;
		        int anaPanelWidth = 900;
		        int anaPanelHeight = 500;

		        // Scroll pane'in boyutları (örneğin, ana panelin sınırları içinde)
		        int scrollPaneX = 10; // Scroll pane'in x koordinatı
		        int scrollPaneY = 10; // Scroll pane'in y koordinatı
		        int scrollPaneWidth = anaPanelWidth - 2 * scrollPaneX; // Scroll pane'in genişliği (kenar boşluğunu bırakarak)
		        int scrollPaneHeight = anaPanelHeight - 2 * scrollPaneY; // Scroll pane'in yüksekliği (kenar boşluğunu bırakarak)

		        // Scroll pane'in boyutlarını ayarlayın
		        scrollPane.setBounds(scrollPaneX, scrollPaneY, scrollPaneWidth, scrollPaneHeight);

		        // Scroll pane'i ana panele ekleyin
		        anaPanel.add(scrollPane);

		        
		        
		        anaPanel.add(scrollPane);
		        anaPanel.revalidate();
		        anaPanel.repaint();
		    }
		});
		
		panel.add(isimLabel);
		panel.add(isimTextField);
		
		panel.add(soyadLabel);
		panel.add(soyadTextField);
		
		panel.add(passwordLabel);
		panel.add(passwordTextField);
		
		panel.add(departmanLabel);
		panel.add(departmanCombo);
		
		panel.add(mailBoxKotasiLabel);
		panel.add(mailBoxKotaCombo);
		
		panel.add(alternatifMailLabel);
		panel.add(alternatifMailTextField);
		
		panel.add(mailOusturButon);
		panel.add(tablodaGosterButon);
		
		panel.setBounds(25, 25, 400, 450);
		
		return panel;
	}
	
	public static String[][] sirketMailVerileriniDosyadanOku(String dosyaYolu) {
		
		// -------TXT Dosyasindaki veri seti yapisi:-------
        // İsim: Tom
        // Soyad: Kruz
        // Departman: Muhasebe
        // Şirket Mail: tom.kruz@acc.kesinbisirket.com
        // Şirket Mail Kota: 3072 MB
        // Password: #D9AXDAO
        // Alternatif Mail: tomk@yahoo.com
		
		int satirSayisi = 0;

		// Ilk olaraqk TXT dosyasi içindeki SATIR SAYISINI belirliyoruz.
		// Çünkü her bir veri seti'miz 7 satir oldugu için SATIR SAYISI 7 'nin x kati olmali.
		// Örnegimizde satirSayisi = 70; oluyor.
		try (BufferedReader br = new BufferedReader(new FileReader(dosyaYolu))) {
	        while (br.readLine() != null) {
	            satirSayisi++;
	        }
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    
	    System.out.println("TXT deki satir sayisi = " + satirSayisi);
		
	    // Elimizdeki bu satirSayisi (70) degiskenini 7'ye bolerek
	    // Kaç kisinin mail kaydini tuttugumuzu buluyoruz.
	    int kisiSayisi = satirSayisi/7; // Ornegimizde bu sayi kisiSayisi=10; oluyor.
	    
	    String[] veriSeti = new String[satirSayisi]; // 70 tane veriyi tek bir diziye aliyoruz.
	    int veriSetiIndex = 0;
	    
	    // bu try/catch blogunda her satiri : karakteri ile ikiye boluyoruz
	    // ikinci kismi aliyoruz
	    // ilk kismi isleme tabi tutmuyoruz.
	    // örnek -> İsim: Tom  -> burada 
	    // veriParcalari [0] = İsim: yazan kisimi isleme almiyoruz 
	    // veriParcalari [1] = Tom yazan kismi tutuyoruz.
	    // Her seferinde veriParcalari index=1 olan parcayi veriSeti'mize ekliyoruz.
	    // Boylece sonucta elimizde 70 veri oluyor.
	    
	    try (BufferedReader br = new BufferedReader(new FileReader(dosyaYolu))) {
	        
	    	String line;

	        try {
				while ((line = br.readLine()) != null) {
					
					// Satırı ':' karakterine göre bölelim ve sadece değerleri alalım
	                String[] veriParcalari = line.split(":");
	                veriSeti[veriSetiIndex++] = veriParcalari[1].trim();
				
				}
			} catch (IOException e) {
				
				e.printStackTrace();
			}
	        
	    } catch (FileNotFoundException e1) {
			
			e1.printStackTrace();
			
		} catch (IOException e1) {
			
			e1.printStackTrace();
			
		}
	    
	    // Simdi bizim elimizde 70 tane verisi olan bir set var -> veriSeti[] dizisi
	    // Bunu 7 serli bloklar halinde String[][] dizi haline getirecegiz.
	    // Sonrada return komutuyla döndürecegiz ve tabloda gorunmesini saglayacagiz.
	    
	    // Ikili String dizimizi olusturmak için gereken islemleri yapiyoruz.
	    String[][] mailDataSet = new String[kisiSayisi][7];
	    int kisiIndex = -1; // -1 den baslatiyoruz çünkü ilk dizi elemani 0 olmali
	    
	    for(int i=0 ; i<satirSayisi ; i++) {
	    	
	    	if (i%7 == 0) kisiIndex++;
	    	
	    	mailDataSet[kisiIndex][i%7] = veriSeti[i];
	    }
	    
	    return mailDataSet;
	}

	
	
	
	public static JPanel sonucPanel(String[] sonucPanelInfo) {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(new Color(169, 203, 217));
		
		panel.add(mailOlusturulduPanel(sonucPanelInfo[0]));
		
		int xStart = 10;
		int x = xStart;
		int y = 150;
		int xFark = 100;
		int yFark = 30;
		
		int labelGenislik = 150;
		int textFieldGenislik = 280;
		int ortakYukseklik = 30;
		
		
		JLabel isimLabel = new JLabel("İsim : ");
		isimLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField isimTextFieldSonuc = new JTextField(sonucPanelInfo[1]);
		isimTextFieldSonuc.setEditable(false);
		isimTextFieldSonuc.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel departmanLabel = new JLabel("Departman : ");
		departmanLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField departmanTextField = new JTextField(sonucPanelInfo[2]);
		departmanTextField.setEditable(false);
		departmanTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel sirketMailLabel = new JLabel("Sirket Mail : ");
		sirketMailLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		sirketMailTextField = new JTextField(sonucPanelInfo[3]);
		sirketMailTextField.setEditable(false);
		sirketMailTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel sirketMailKotaLabel = new JLabel("Mail Kotasi : ");
		sirketMailKotaLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		sirketMailKotaTextField = new JTextField(sonucPanelInfo[4]);
		sirketMailKotaTextField.setEditable(false);
		sirketMailKotaTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel passwordLabel = new JLabel("Password : ");
		passwordLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField passwordTextField = new JTextField(sonucPanelInfo[5]);
		passwordTextField.setEditable(false);
		passwordTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart;
		y = y + yFark;
		
		JLabel alternatifMailLabel = new JLabel("Alternatif Mail : ");
		alternatifMailLabel.setBounds(x, y, labelGenislik, ortakYukseklik);
		x = x + xFark;
		
		JTextField alternatifMailTextField = new JTextField(sonucPanelInfo[6]);
		alternatifMailTextField.setEditable(false);
		alternatifMailTextField.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		x = xStart + xFark;
		y = y + (yFark*2);
		
		JButton mailFormTemizleButon = new JButton("Mail Formunu Temizle");
		mailFormTemizleButon.setBounds(x, y, textFieldGenislik, ortakYukseklik);
		
		mailFormTemizleButon.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent e) {
		        
		    	anaPanel.removeAll();
		    	
		    	// Formdaki tüm JTextField'ların içeriğini temizliyoruz.
		    	sonucPanelGoster[0] = "mailBekleniyor.jpg";
		        sonucPanelGoster[1] = "İsim Soyad";
		        sonucPanelGoster[2] = "Departman";
		        sonucPanelGoster[3] = "Şirket mail";
		        sonucPanelGoster[4] = " 0 MB";
		        sonucPanelGoster[5] = "Şifre";
		        sonucPanelGoster[6] = "Alternatif mail";
		        
		        anaPanel.add(infoPanel());
		        anaPanel.add(sonucPanel(sonucPanelGoster));
		        
		        anaPanel.revalidate();
		        anaPanel.repaint();
		    }
		});

		
		
		panel.add(isimLabel);
		panel.add(isimTextFieldSonuc);
		
		panel.add(departmanLabel);
		panel.add(departmanTextField);
		
		panel.add(sirketMailLabel);
		panel.add(sirketMailTextField);
		
		panel.add(sirketMailKotaLabel);
		panel.add(sirketMailKotaTextField);
		
		panel.add(passwordLabel);
		panel.add(passwordTextField);
		
		panel.add(alternatifMailLabel);
		panel.add(alternatifMailTextField);
		
		panel.add(mailFormTemizleButon);
		
		panel.setBounds(475, 25, 400, 450);
		
		return panel;
	}
	
	public static String randomPassword() {
		
		String passwordSet = "QWERTYUIOPASDFGHJKLZXCVBNM0123456789!#$%&*";
		char[] password = new char[passwordLength];
		for (int i=0 ; i<passwordLength ; i++) {
			int rastgele = (int) (Math.random() * passwordSet.length());
			password[i] = passwordSet.charAt(rastgele);
		}
		
		String pass = new String(password);
		
		return pass;
	}

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

	}

}