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

import algoritmobr.Grafo;
import dibujo.AreaDibujo;
import dibujo.Arista;
import dibujo.Punto;
import interfaz.Interfaz;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author voragoth
 */
public class AbrirArchivo implements ActionListener{
    
    private AreaDibujo areaDibujo;
    private File file;
    private FileReader myReader;
    private BufferedReader lector;
    private FileNameExtensionFilter filtro;
    private JFileChooser fileChooser;
            
    public AbrirArchivo(AreaDibujo areaDibujo){
        this.areaDibujo=areaDibujo;
        Interfaz.abrirDocumento.addActionListener(this);
        Interfaz.menuAbrir.addActionListener(this);
        fileChooser=new JFileChooser();
        filtro=new FileNameExtensionFilter("Archivo de Grafo .gr","gr","GR");
        fileChooser.setFileFilter(filtro);
        fileChooser.setMultiSelectionEnabled(true);
        file=null;
    }
    
    private File[] obtener(){
        File[] ruta=null;
        try{
            if(fileChooser.showOpenDialog(null) ==JFileChooser.APPROVE_OPTION){
                
                ruta= fileChooser.getSelectedFiles();
                //ruta=fileChooser.getSelectedFile().getAbsolutePath();
            } else{
                return null;
            }
        }
        catch(Exception e){
            
        }
        return ruta;
    }
    
    private void abrir() throws FileNotFoundException, IOException, PropertyVetoException{
        while(true){
            try{
                
                File[] ruta;
                ruta=obtener();
                if(ruta==null){
                    return;
                }
                
                /**
                 * aca poner el llamado al grafo para llenarlo
                 */
                Interfaz.B = new Grafo("B");
                Interfaz.R = new Grafo("R");
                Interfaz.B.LeerGrafo(ruta[0].getAbsolutePath());
                Interfaz.R.LeerGrafo(ruta[1].getAbsolutePath());
                
                Interfaz.frameDibujo.setVisible(true);
                /**
                 * Aquí debe dibujar el Grafo abierto en B y R
                 */
                
                Interfaz.nodoNuevo.setEnabled(true);
                Interfaz.aristaNueva.setEnabled(true);
                Interfaz.BarAgregaArista.setEnabled(true);
                Interfaz.configurarPagina.setEnabled(true);
                Interfaz.imprimir.setEnabled(true);
                Interfaz.Imprimir.setEnabled(true);
                Interfaz.jButton1.setEnabled(true);
                Interfaz.Cuadricular.setEnabled(true);
                Interfaz.Screen.setEnabled(true);
                Interfaz.guardarimagen.setEnabled(true);
                Interfaz.cuadri.setEnabled(true);
                break;
                
        } catch(Exception e) {
                JOptionPane.showMessageDialog(null, "ERROR");
            } finally {
                try{
                    lector.close();
                    myReader.close();
                break;
                }
                catch(NullPointerException n){
                    
                }
            }
        }
    }
    private void cerrarFrame(){
            Interfaz.abierto=false;
            Interfaz.file=null;
            areaDibujo.limpiarArea();
            areaDibujo.grafo.destruirGrafo();
            
            try {
                Thread.sleep(120);
            } catch (InterruptedException ex) {
                Logger.getLogger(Interfaz.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            
            areaDibujo.desactivar();
            Interfaz.guardarArchivo.setEnabled(false);
            Interfaz.guardarimagen.setEnabled(false);
            Interfaz.nodoNuevo.setEnabled(false);
            Interfaz.aristaNueva.setEnabled(false);
            Interfaz.BarAgregaArista.setEnabled(false);
            Interfaz.cambiarEtiqueta.setEnabled(false);
            Interfaz.configurarPagina.setEnabled(false);
            Interfaz.imprimir.setEnabled(false);
            Interfaz.Imprimir.setEnabled(false);
            Interfaz.jButton1.setEnabled(false);
         //   Interfaz.jScrollPane1.setBounds(0, 0, 905, 625);
            Interfaz.Screen.setEnabled(false);
            Interfaz.Cuadricular.setEnabled(false);
            Interfaz.menuGuardar.setEnabled(false);
            Interfaz.BarAgregavertice.setEnabled(false);
            Interfaz.cuadri.setEnabled(false);
            
            //AreaDibujo.desactivar();
        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if(Interfaz.abierto==true){
                if(JOptionPane.showConfirmDialog(null, "¿ESTA SEGURO DE CERRAR EL ARCHIVO?\n" + "CUALQUIER DATO NO GUARDADO SE PERDERA")==JOptionPane.YES_OPTION){
                    Interfaz.frameDibujo.setVisible(false);
                    cerrarFrame();
                    abrir();
                }
                
            }
            else{
                abrir();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(AbrirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(AbrirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(AbrirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        }
        

    }
}
