/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestion;

import dibujo.AreaDibujo;
import interfaz.Interfaz;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

public class GuardarArchivo implements ActionListener{

    public AreaDibujo areaDibujo;
    public File file;
    public FileWriter myWriter;
    public PrintWriter escritor;
    public FileNameExtensionFilter filtro;
    public JFileChooser fileChooser;
    public boolean flag;
            
    public GuardarArchivo(AreaDibujo areaDibujo){
        this.areaDibujo=areaDibujo;
        Interfaz.guardarArchivo.addActionListener(this);
        Interfaz.menuGuardar.addActionListener(this);
        fileChooser=new JFileChooser();
        filtro=new FileNameExtensionFilter("Archivo gr","gr","GR");
        fileChooser.setFileFilter(filtro);
        fileChooser.setSelectedFile(new File("Archivo gr"));
        file=null;
        flag=false;
    }
    
    public String obtener(){
        String ruta =new String();
        while(true){
         try{
                if(fileChooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION){
                    if(fileChooser.getSelectedFile().exists()==false){
                        ruta=fileChooser.getSelectedFile().getParent();
                        break;
                    }else {
                        String mensaje=new String();
                        int respuesta;
                        mensaje=String.format("EL ARCHIVO QUE INTENTA GUARDAR YA EXISTE\n"
                                + "¿DESEA SOBREESCRIBIRLO?");
                        respuesta=JOptionPane.showConfirmDialog(areaDibujo, mensaje);
                        if(respuesta==JOptionPane.YES_OPTION){
                            ruta=fileChooser.getSelectedFile().getParent();
                            File fichero = new File(ruta+"/B.gr");
                            fichero.delete();
                            File fichero2 = new File(ruta+"/R.gr");
                            fichero2.delete();
                            break;   
                        }
                        if(respuesta==JOptionPane.CANCEL_OPTION){
                            flag=true;
                            return null;
                        }
                    }
                    
                       }else{
                    flag=true;
                    return null;
                }
            
            }
            catch(Exception e){
                JOptionPane.showMessageDialog(null, "ARCHIVO NO VALIDO");            
            }
        }
        return ruta;
    }
    
    public void guardarComo() throws IOException {
        int indicePuntos;
        int indiceAristas;
        String ruta= new String();
        while(true){
            try{
            ruta=obtener();
                //System.out.println(ruta);
                Interfaz.B.exportar(ruta);
                Interfaz.R.exportar(ruta);
                
            if(ruta==null){
                break;
            }
            else{
                 Interfaz.file=new File(ruta);
            }
            break;
            } 
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(null, "NO SE PUDE MODIFICAR EL ARCHIVO");  
            }
            finally{
                    try{
                        myWriter.close();
                        escritor.close();
                        break;
                    }
                    catch(NullPointerException n){
                        //return;
                    }
            }
        }
    
    }
    
    public void guardar() throws IOException{
        Interfaz.frameDibujo.setTitle(file.getName());
        myWriter.close();
        escritor.close();
        //Interfaz.mensajeAcciones.setForeground(Color.green);
        //Interfaz.mensajeAcciones.setText("ARCHIVO GUARDADO");
    } 

    @Override
    public void actionPerformed(ActionEvent e) {
        if(Interfaz.archivo==true){
            try {
                guardar();
            } catch (IOException ex) {
                Logger.getLogger(GuardarArchivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                guardarComo();
            } catch (IOException ex) {
                Logger.getLogger(GuardarArchivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if(file!=null){
            Interfaz.file=file;
            Interfaz.archivo=true;
        } 
        if(flag=false){
            Interfaz.file=file;
            Interfaz.archivo=true;
        }
    }
}
