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

public class Tableau {

    private static void changeConstraints(GridBagConstraints g, int gx, int gy, int gw, int gh, int anchor, int fill, double wx, double wy, Insets i) {
        g.gridx = gx;
        g.gridy = gy;
        g.gridwidth = gw;
        g.gridheight = gh;
        g.anchor = anchor;
        g.fill = fill;
        g.weightx = wx;
        g.weighty = wy;
        g.insets = i;
    }
    public static void main(String[] args) {
        try {
            Class.forName("org.mariadb.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            System.err.println("MariaDB driver not found");
            return;
        }


        Connection cnx;
        try {
            cnx = DriverManager.getConnection("jdbc:mariadb://dwarves.iut-fbleau.fr/horville", "horville", "a5gc95");
        } catch (SQLException ex) {
            System.err.println("Unable to access Database.");
            return;
        }

        JFrame f = new JFrame();
        f.setLayout(new GridBagLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(150, 500);

        GridBagConstraints g = new GridBagConstraints();
        
        try {
            PreparedStatement req = cnx.prepareStatement("SELECT Module.code, Champ.code FROM Champ JOIN Module ON Champ.id = Module.id ORDER BY Module.code ASC;");
            req.executeUpdate();
            ResultSet rs = req.executeQuery();
            
            String lastMod = null;
            int length = 0;
            int count = 0;
            
            while (rs.next()) {
                String moduleName = rs.getString(1);
                String fieldName = rs.getString(2);

                if (!moduleName.equals(lastMod) && lastMod != null) {
                    JLabel modLabel = new JLabel(lastMod);
                    modLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                    changeConstraints(g, 1, count - length, 1, length, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 1f, 1f, new Insets(0, 0, 0, 0));
                    f.add(modLabel, g);
                    length = 0;
                    lastMod = moduleName;
                } else {
                    lastMod = moduleName;
                }

                JLabel fieldLabel = new JLabel(fieldName);
                fieldLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                changeConstraints(g, 2, count, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 1f, 1f, new Insets(0, 0, 0, 0));
                f.add(fieldLabel, g);

                length++;
                count++;
            }
            
            JLabel modLabel = new JLabel(lastMod);
            modLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            g.gridx = 1;
            g.gridy = count - length;
            g.gridwidth = 1;
            g.gridheight = length;
            g.anchor = GridBagConstraints.CENTER;
            g.fill = GridBagConstraints.BOTH;
            g.weightx = 1f;
            g.weighty = 1f;
            g.insets = new Insets(0, 0, 0, 0);
            f.add(modLabel, g);
            
            rs.close();
            req.close();
            
        } catch (SQLException ex) {
            System.err.println("SQL Request exception.");
            System.err.println (ex);
        }

        f.setVisible(true);

        try {
            cnx.close();
        } catch (SQLException ex) {
            System.err.println("Unable to close connection.");
        }
    }
}