package fr.iutfbleau.sae;

import java.awt.*;
import javax.swing.*;

/**
 * 
 * Panneau qui affiche les fréquences des composantes rouge, verte et bleue.
 * Chaque composante est affichée dans une zone de texte non modifiable.
 */
public class FrequencyTablePanel extends JPanel {

    /** Zone d'affichage pour les fréquences du rouge. */
    private JTextArea freqRouge;

    /** Zone d'affichage pour les fréquences du vert. */
    private JTextArea freqVert;

    /** Zone d'affichage pour les fréquences du bleu. */
    private JTextArea freqBleu;

    /**
     * Constructeur du panneau.  
     * Initialise l'affichage avec trois zones de texte (R, G, B).
     */
    public FrequencyTablePanel() {

        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));

        JLabel etiquette1 = new JLabel("Fréquences");
        etiquette1.setFont(new Font("SansSerif", Font.BOLD, 16));
        add(etiquette1);
        add(Box.createVerticalStrut(10));

        freqRouge = creationZoneText("Rouge");
        freqVert  = creationZoneText("Vert");
        freqBleu  = creationZoneText("Bleu");
    }

    /**
     * Crée une zone de texte avec un label et un scroll.  
     * Cette méthode est utilisée trois fois : rouge, vert et bleu.
     */
    private JTextArea creationZoneText(String titre) {
        add(new JLabel(titre + " :"));

        JTextArea zone = new JTextArea(8, 30);
        zone.setEditable(false);
        zone.setFont(new Font("Monospaced", Font.PLAIN, 12));

        JScrollPane scroll = new JScrollPane(zone);
        scroll.setPreferredSize(new Dimension(300, 120));

        add(scroll);
        add(Box.createVerticalStrut(10));

        return zone;
    }

    /**
     * Met à jour les trois zones d'affichage avec les nouvelles valeurs.
     *
     * @param freqR tableau des fréquences du rouge
     * @param freqG tableau des fréquences du vert
     * @param freqB tableau des fréquences du bleu
     */
    public void updateFrequencies(int[] freqR, int[] freqG, int[] freqB) {
        mettreAJour(freqRouge, freqR);
        mettreAJour(freqVert, freqG);
        mettreAJour(freqBleu, freqB);
    }

    /**
     * Remplit une zone de texte avec le contenu d'un tableau de fréquences.
     */
    private void mettreAJour(JTextArea zone, int[] frequence) {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < frequence.length; i++) {
            sb.append(String.format("%3d : %d%n", i, frequence[i]));

            if ((i + 1) % 10 == 0) { // retour à la ligne toutes les 10 valeurs
                sb.append("\n");
            }
        }

        zone.setText(sb.toString());
    }
}
