import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;

public class Luminance extends JPanel implements MouseListener {

       private final Random random = new Random();
       private final List<Color> couleurs = new LinkedList<>();
   
       private static final int NB_COULEURS = 10;
       private static final int LARGEUR = 60;
       private static final int HAUTEUR = 80;
       private static final int ESPACE = 8;
       private static final int INCLINAISON = 15; // décalage pour le parallélogramme
   
       public Luminance() {
           for (int i = 0; i < NB_COULEURS; i++) {
               int r = random.nextInt(256);
               int g = random.nextInt(256);
               int b = random.nextInt(256);
               couleurs.add(new Color(r, g, b));
           }
   
           int largeurFenetre = (LARGEUR + ESPACE) * NB_COULEURS + 40;
           int hauteurFenetre = HAUTEUR + 60;
           this.setPreferredSize(new Dimension(largeurFenetre, hauteurFenetre));
           addMouseListener(this);
       }
   
       public int LuminenceApp(Color c) {
           int rouge = c.getRed();
           int vert = c.getGreen();
           int bleu = c.getBlue();
           return (21 * rouge + 72 * vert + 7 * bleu) / 100;
       }
   
       @Override
       protected void paintComponent(Graphics pinceau) {
           super.paintComponent(pinceau);
           Graphics g = pinceau;
   
           int x = 20;
           int y = 20;
   
           for (Color c : couleurs) {
               g.setColor(c);
   
               // dessin d’un parallélogramme
               int[] xs = {x + INCLINAISON, x + LARGEUR + INCLINAISON, x + LARGEUR, x};
               int[] ys = {y, y, y + HAUTEUR, y + HAUTEUR};
               Polygon p = new Polygon(xs, ys, 4);
   
               g.fillPolygon(p);
               g.setColor(Color.DARK_GRAY);
               g.drawPolygon(p);
   
               x = x + LARGEUR + ESPACE;
           }
       }
   
       private int indexAt(int mx, int my) {
           int x = 20;
           int y = 20;
   
           for (int i = 0; i < couleurs.size(); i++) {
               int[] xs = {x + INCLINAISON, x + LARGEUR + INCLINAISON, x + LARGEUR, x};
               int[] ys = {y, y, y + HAUTEUR, y + HAUTEUR};
               Polygon p = new Polygon(xs, ys, 4);
   
               if (p.contains(mx, my)) {
                   return i;
               }
   
               x = x + LARGEUR + ESPACE;
           }
           return -1;
       }
   
       @Override
       public void mouseClicked(MouseEvent e) {
           int intervalle = indexAt(e.getX(), e.getY());
           if (intervalle >= 0) {
               Color c = couleurs.get(intervalle);
               System.out.println("Luminance = " + LuminenceApp(c) +
                       " (R = " + c.getRed() + " G = " + c.getGreen() + " B = " + c.getBlue() + ")");
               couleurs.remove(intervalle);
               repaint();
           }
       }
   
       @Override public void mousePressed(MouseEvent e) {}
       @Override public void mouseReleased(MouseEvent e) {}
       @Override public void mouseEntered(MouseEvent e) {}
       @Override public void mouseExited(MouseEvent e) {}
   
       public static void main(String[] args) {
           JFrame f = new JFrame("Luminence");
           f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           f.setContentPane(new Luminance());
           f.pack();
           f.setLocationRelativeTo(null);
           f.setVisible(true);
       }
   }
   