import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class PaneliResimKaydet {
	
	public static String resimKayitKlasoru = "/Kida/";  // Klasor ismi...
	
	public static String masaustuYolu() {
	    
		// Bu method, sistemde bulunan kullanıcının masaüstü klasörünün yolunu döndürür.
	    
	    Path masaustuYolu = Paths.get(System.getProperty("user.home"), "Desktop");
	    
	    // Bulunan yolu String'e dönüştürüyoruz.
	    String masaustuYoluString = masaustuYolu.toString();
	   
	    return masaustuYoluString;
	    
	  }

	public static JLabel resimEkle(int w, int h) throws IOException {
		
		// Rastgele bir resim yukluyoruz.
		// Bu linkteki web sayfasi belirtilen genislik ve yukseklikte resim verir!
		
		URL imageUrl = new URL("https://picsum.photos/"+w+"/"+h);
		Image image = ImageIO.read(imageUrl);
		
		// Resmi label'e ekliyoruz
		JLabel label = new JLabel(new ImageIcon(image));
		
		return label;
	}
	
	PaneliResimKaydet() throws IOException {
		
		JFrame frame = new JFrame();
		frame.setSize(400, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		
		JPanel panel = new JPanel();
		
		panel.add(resimEkle(400,400));
		
		// Sağ tıklama menüsünü olusturuyoruz.
		JPopupMenu sagKlikMenu = new JPopupMenu();
		
		JMenuItem saveAsJpeg = new JMenuItem("Save as JPEG");
		JMenuItem saveAsPng = new JMenuItem("Save as PNG");
		JMenuItem menuCizgi = new JMenuItem("------------");
		JMenuItem newPicture = new JMenuItem("New Picture (400x400 px)");
		JMenuItem newPicture2 = new JMenuItem("New Picture (800x600 px)");
		
		saveAsJpeg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				// Resmi JPG olarak kaydetme
				
				try {
					
					// BufferedImage ile resmifrmae.den aliyoruz.
					BufferedImage bufferedImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
					
					// Graphics kutuphanesi yardimiyla grafik ture ceviriyoruz.
					Graphics g = bufferedImage.getGraphics();
                  
					// Su an bellekte resmimiz hazir.
					frame.paint(g);
					
					//Dosya ismini hazirliyoruz.
					//Dosya ismini su sekilde olmali : resim-2022-12-18 11-03-32.jpg
					
					// Once tarih kismini hazirlayalim
					SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-d HH-mm-ss");
					Date date = new Date();
					
					// Onune resim- ibaresini ekleyelim.
					String dosyaIsmi = "resim-" + dateFormat.format(date);
					
					ImageIO.write(bufferedImage, "jpeg", new File(masaustuYolu()+resimKayitKlasoru+dosyaIsmi+".jpg"));
    			  
    		  } catch (Exception ex) {   // Herhangi bir hata olura buradan aliyoruz hata mesajini
          
    			  ex.printStackTrace();
       
    		  }
    		  
    	  }
    	  
      });
   
		saveAsPng.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				// Resmi PNG olarak kaydetme
				
				try {
					
					// BufferedImage ile resmifrmae.den aliyoruz.
					BufferedImage bufferedImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
					
					// Graphics kutuphanesi yardimiyla grafik ture ceviriyoruz.
					Graphics g = bufferedImage.getGraphics();
                
					// Su an bellekte resmimiz hazir.
					frame.paint(g);
					
					//Dosya ismini hazirliyoruz.
					//Dosya ismini su sekilde olmali : resim-2022-12-18 11-03-32.jpg
					
					// Once tarih kismini hazirlayalim
					SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-d HH-mm-ss");
					Date date = new Date();
					
					// Onune resim- ibaresini ekleyelim.
					String dosyaIsmi = "resim-" + dateFormat.format(date);
					
					ImageIO.write(bufferedImage, "png", new File(masaustuYolu()+resimKayitKlasoru+dosyaIsmi+".png"));
					
				} catch (Exception ex) {   // Herhangi bir hata olura buradan aliyoruz hata mesajini
					
					ex.printStackTrace();
					
				}
				
    	  }
    	  
      });

		newPicture.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
    		
				panel.removeAll();
			
				try {
					
					panel.add(resimEkle(400,400));
					
				} catch (IOException e) {
					
					e.printStackTrace();
					
				}
				
				frame.setSize(400,400);
				frame.repaint();
    		  
			}
			
		});
      
		newPicture2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
    		
				panel.removeAll();
				
				try {
    			  
					panel.add(resimEkle(800,600));
    		
				} catch (IOException e) {
					
					e.printStackTrace();
					
				}

				frame.setSize(800,600);
				frame.repaint();
				
			}
			
		});
		// PopupMenu'ye ekliyoruz item'larimizi.
		
		sagKlikMenu.add(saveAsJpeg);
		sagKlikMenu.add(saveAsPng);
		sagKlikMenu.add(menuCizgi);
		sagKlikMenu.add(newPicture);
		sagKlikMenu.add(newPicture2);
		
		// Sağ tıklama menüsünü (PopupMenu) JPanel'e ekliyoruz
		panel.setComponentPopupMenu(sagKlikMenu);
		
		frame.add(panel);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	
	}
	
}






