import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class LuminanceApp extends JFrame {
    private final List<Color> colors = new ArrayList<>(); // Liste des couleurs des parallélogrammes
    private final int parallelogramWidth = 100;
    private final int parallelogramHeight = 50;
    
    public LuminanceApp() {
        setTitle("Luminance App");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        // Générer 10 couleurs aléatoires et les ajouter à la liste
        generateRandomColors(10);

        // Ajouter un MouseListener pour détecter les clics
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                handleMouseClick(e.getX(), e.getY());
            }
        });
    }

    // Génération des couleurs aléatoires
    private void generateRandomColors(int numberOfColors) {
        Random random = new Random();
        for (int i = 0; i < numberOfColors; i++) {
            Color color = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
            colors.add(color);
        }
    }

    // Gestion du clic de souris
    private void handleMouseClick(int x, int y) {
        int index = getClickedParallelogramIndex(x, y);
        if (index >= 0 && index < colors.size()) {
            Color color = colors.remove(index); // Supprimer la couleur cliquée
            float luminance = calculateLuminance(color);
            System.out.println("Luminance de la couleur supprimée : " + luminance);
            repaint(); // Redessiner la fenêtre avec les parallélogrammes restants
        }
    }

    // Calcul de la luminance selon la formule donnée
    private float calculateLuminance(Color color) {
        return 21 * color.getRed() + 72 * color.getGreen() + 7 * color.getBlue();
    }

    // Récupère l'index du parallélogramme cliqué
    private int getClickedParallelogramIndex(int x, int y) {
        int posX = 50;
        int posY = 50;
        for (int i = 0; i < colors.size(); i++) {
            if (x >= posX && x <= posX + parallelogramWidth && y >= posY && y <= posY + parallelogramHeight) {
                return i;
            }
            posY += parallelogramHeight + 10; // Espace entre les parallélogrammes
        }
        return -1;
    }

    // Dessin des parallélogrammes dans la fenêtre
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        int posX = 50;
        int posY = 50;
        for (Color color : colors) {
            g.setColor(color);
            drawParallelogram(g, posX, posY, parallelogramWidth, parallelogramHeight);
            posY += parallelogramHeight + 10; // Espacement vertical
        }
    }

    // Dessin d'un parallélogramme
    private void drawParallelogram(Graphics g, int x, int y, int width, int height) {
        int[] xPoints = {x, x + width - 20, x + width, x + 20};
        int[] yPoints = {y, y, y + height, y + height};
        g.fillPolygon(xPoints, yPoints, 4);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            LuminanceApp app = new LuminanceApp();
            app.setVisible(true);
        });
    }
}
