/*
La classe <code>SaveButton</code> est utilisée pour la sauvegarde de la grille au format .gri à l'aide d'un bouton.
@version 1.1
@author Thomas Follea, Yann Keraudren
*/

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

public class SaveButton implements ActionListener {

    private int GRID_SIZE;
    private JTextField[][] grid;

    public SaveButton(int GRID_SIZE, JTextField[][] grid) {
	this.GRID_SIZE = GRID_SIZE;
	this.grid = grid;

    }
	
    @Override
    // Lorsque l'utilisateur appuie sur le bouton, il exécute l'action saveFichier();
    public void actionPerformed(ActionEvent e) {
	    saveFichier();
    }

    private void saveFichier() {
        try {
            //Ouvre le fichier de sauvegarde
            FileOutputStream fr = new FileOutputStream("GrilleNum1.gri");
            DataOutputStream fichier = new DataOutputStream(fr);
            JTextField[][] texte = grid;

            // Parcour la grille
            for (int i = 0; i < GRID_SIZE; i++) {
                StringBuilder build = new StringBuilder();
                for (int j = 0; j < GRID_SIZE; j++) {
                    String value = texte[i][j].getText();

                    // Vérifier si la case contient plus d'un chiffre
                    if (value.length() > 1) {
                        // Afficher un message d'erreur et arrêter la sauvegarde
                        JOptionPane.showMessageDialog(null, "Une case comporte plus d'un chiffre. Veuillez corriger avant de sauvegarder.", "Erreur", JOptionPane.ERROR_MESSAGE);
                        try {
                            fichier.close();
                        } catch (IOException e) {
                            System.err.println("Erreur de fermeture");
                        }
                        return; // Arrêter la sauvegarde si une case comporte plus d'un chiffre
                    }

                    // Si la case est vide, ajouter "0" à la chaine de caractères à sauvegarder
                    if (value.isEmpty()) {
                        build.append("0");
                    } else {
                        build.append(value);
                    }
                }

                // Convertir la chaine de caractères en entier et écrire dans le fichier
                String convert = build.toString();
                int write = Integer.parseInt(convert);
                fichier.writeInt(write);
            }

            // Fermer le fichier après la sauvegarde
            try {
                fichier.close();
            } catch (IOException e) {
                System.err.println("Erreur de fermeture");
            }
            // Affiche un message de succès
            JOptionPane.showMessageDialog(null, "Grille sauvegardée avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
        } catch (IOException e) {
            // Affiche un message d'erreur
            JOptionPane.showMessageDialog(null, "Erreur lors de la sauvegarde de la grille.", "Erreur", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }
}