package fr.iutfbleau.sae;
import java.awt.BorderLayout;
import java.io.File;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

/**
 * Thread pour sauvegarder un fichier PIF en arriere-plan.
 * Permet d'eviter de bloquer l'interface graphique pendant la sauvegarde.
 * Affiche un dialogue de progression pendant la sauvegarde.
 */
public class ThreadSauvegardePIF extends Thread {
    
    private ConverterController controleur;
    private File fichier;
    
    /**
     * Construit un nouveau thread de sauvegarde.
     * 
     * @param controleur le controleur qui gere la sauvegarde
     * @param fichier le fichier dans lequel sauvegarder
     */
    public ThreadSauvegardePIF(ConverterController controleur, File fichier) {
        this.controleur = controleur;
        this.fichier = fichier;
    }
    
    /**
     * Execute la sauvegarde du fichier PIF.
     * Affiche un dialogue de progression pendant la sauvegarde.
     */
    @Override
    public void run() {
        // Creer le dialogue de progression
        JDialog dialogue = new JDialog();
        dialogue.setTitle("Sauvegarde");
        dialogue.setModal(false);
        dialogue.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        dialogue.setSize(300, 100);
        dialogue.setLocationRelativeTo(null);
        dialogue.setLayout(new BorderLayout(10, 10));
        
        JLabel label = new JLabel("Sauvegarde en cours...", JLabel.CENTER);
        dialogue.add(label, BorderLayout.CENTER);
        
        JProgressBar barre = new JProgressBar();
        barre.setIndeterminate(true);
        dialogue.add(barre, BorderLayout.SOUTH);
        
        dialogue.setVisible(true);
        
        try {
            // Sauvegarder le fichier
            controleur.saveAsPIF(fichier.getAbsolutePath());
            dialogue.dispose();
            GestionErreur.afficherInfo("Fichier sauvegarde avec succes : " + fichier.getName());
            
        } catch (Exception e) {
            dialogue.dispose();
            GestionErreur.afficherErreur("Erreur lors de la sauvegarde : " + e.getMessage());
        }
    }
}