package core;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

import org.apache.log4j.PropertyConfigurator;

import actions.AbrirAction;
import actions.AyudaAction;
import actions.DetalleAction;
import actions.GemelosAction;
import actions.GuardarAction;
import actions.MatrizAction;
import actions.NuevoAction;
import actions.OpcionesAction;
import actions.ResultadosAction;
import actions.SimplesAction;
import business.Configuracion;
import business.Resultados;

public class Aplicacion extends JFrame {

	private static final long serialVersionUID = 0x392674f49eeb4dffL;
	private static ResourceBundle mensajes;
	private static Locale currentLocale;
	private static String language = "es";
	private static Menu menu = new Menu();
	private static BarraHerramientas barraHerramientas;
	private static PanelInfo panelInfo = new PanelInfo();
	private static MenuContextual menuContextual = new MenuContextual();
	private static PanelEdicion panelEdicion = new PanelEdicion(panelInfo, menuContextual);
	private static JScrollPane panelContenedor;

	public Aplicacion() {
		PropertyConfigurator.configure("log4j.properties");

		currentLocale = new Locale(language);
		mensajes = ResourceBundle.getBundle("lang.MessagesBundle", currentLocale);
		
		barraHerramientas = new BarraHerramientas();

		try {
			setTitle(new String(mensajes.getString("titulo").getBytes("ISO-8859-1"),"UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		menu.setMensajes(mensajes);
		barraHerramientas.setMensajes(mensajes);
		panelInfo.setMensajes(mensajes);
		panelEdicion.setMensajes(mensajes);
		menuContextual.setMensajes(mensajes);
		new Resultados();
		new Configuracion();
	}


	public static void main(String args[]) {
		Aplicacion miMarco = new Aplicacion();
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension pantallaTam = kit.getScreenSize();
		int pantallaAlto = pantallaTam.height;
		int pantallaAncho = pantallaTam.width;
		miMarco.setSize(pantallaAncho, pantallaAlto);
		miMarco.setLocation(0, 0);
		WindowListener wndCloser = new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		};
		GuardarAction guardar = new GuardarAction(panelEdicion);
		AbrirAction abrir = new AbrirAction(panelEdicion, panelInfo);
		NuevoAction nuevo = new NuevoAction(miMarco);
		MatrizAction matriz = new MatrizAction(panelEdicion);
		ResultadosAction resultados = new ResultadosAction(panelEdicion, panelInfo, barraHerramientas);
		GemelosAction gemelos = new GemelosAction(panelEdicion);
		DetalleAction detalle = new DetalleAction(panelEdicion);
		OpcionesAction opciones = new OpcionesAction(panelEdicion);
		AyudaAction ayuda = new AyudaAction(panelEdicion);
		SimplesAction accionesSimples = new SimplesAction(miMarco);
		menu.getAbrirItem().addActionListener(abrir);
		menu.getGuardarMItem().addActionListener(guardar);
		menu.getGrafo().addActionListener(nuevo);
		menu.getArbol().addActionListener(nuevo);
		menu.getCompleto().addActionListener(nuevo);
		menu.getCiclo().addActionListener(nuevo);
		menu.getRueda().addActionListener(nuevo);
		menu.getEstrella().addActionListener(nuevo);
		menu.getTresDimensiones().addActionListener(accionesSimples);
		menu.getDistancias().addActionListener(matriz);
		menu.getDimension().addActionListener(resultados);
		menu.getGemelos().addActionListener(gemelos);
		menu.getDijkstra().addActionListener(resultados);
		menu.getDetalle().addActionListener(detalle);
		menu.getOpciones().addActionListener(opciones);
		menu.getTablaContenidos().addActionListener(ayuda);
		menu.getAcercaDe().addActionListener(ayuda);
		menu.getSalir().addActionListener(accionesSimples);

		barraHerramientas.getBotonAbrir().addActionListener(abrir);
		barraHerramientas.getBotonGuardar().addActionListener(guardar);
		barraHerramientas.getBotonGrafo().addActionListener(nuevo);
		barraHerramientas.getBotonBorrar().addActionListener(accionesSimples);
		barraHerramientas.getBotonSolucionAnterior().addActionListener(resultados);
		barraHerramientas.getBotonSolucionSiguiente().addActionListener(resultados);
		barraHerramientas.getBotonLimpiar().addActionListener(resultados);
		barraHerramientas.getBotonOpciones().addActionListener(opciones);
		barraHerramientas.getBotonDimensionGrafo().addActionListener(resultados);
		barraHerramientas.getBotonAyuda().addActionListener(ayuda);
		barraHerramientas.getComboIdioma().addActionListener(accionesSimples);
		barraHerramientas.getNumeroZoom().setText(((Integer)barraHerramientas.getBarraZoom().getValue()).toString() + "%");
		barraHerramientas.getBotonMenosZoom().addActionListener(accionesSimples);
		barraHerramientas.getBarraZoom().addChangeListener(accionesSimples);
		barraHerramientas.getBotonMasZoom().addActionListener(accionesSimples);
		miMarco.setJMenuBar(menu);
		miMarco.getContentPane().setBackground(new Color(172,213,215));
		panelContenedor = new JScrollPane();
		panelContenedor.setWheelScrollingEnabled(false);
		panelContenedor.setViewportView(panelEdicion);
		JSplitPane spV = new JSplitPane(0, panelInfo, panelContenedor);
		spV.setDividerLocation(130);
		spV.setDividerSize(5);
		spV.setEnabled(false);
		miMarco.addWindowListener(wndCloser);
		miMarco.getContentPane().add(barraHerramientas, "North");
		miMarco.getContentPane().add(panelInfo, "West");
		miMarco.getContentPane().add(spV, "Center");
		miMarco.setMinimumSize(new Dimension(pantallaAncho, pantallaAlto));
		panelContenedor.setBackground(new Color(172,213,215));
		miMarco.setVisible(true);
	}


	public void cambiarIdioma(ImageIcon idioma) {
		if (idioma.getDescription().equals("Chino")){
			setLanguage("zh");
		} else if (idioma.getDescription().equals("Espaņol")){
			setLanguage("es");
		} else if(idioma.getDescription().equals("Ingles")) {
			setLanguage("en");
		}

		currentLocale = new Locale(language);
		mensajes = ResourceBundle.getBundle("lang.MessagesBundle", currentLocale);
		menu.setMensajes(mensajes);
		barraHerramientas.setMensajes(mensajes);
		panelInfo.setMensajes(mensajes);
		panelEdicion.setMensajes(mensajes);
		menuContextual.setMensajes(mensajes);
		try {
			setTitle(new String(mensajes.getString("titulo").getBytes("ISO-8859-1"),"UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void repaint() {
		Double zoom = panelEdicion.getZoom();
		if(zoom < 1) {
			panelContenedor.getHorizontalScrollBar().setEnabled(false);
			panelContenedor.getVerticalScrollBar().setEnabled(false);
		} else {
			panelContenedor.getHorizontalScrollBar().setEnabled(true);
			panelContenedor.getVerticalScrollBar().setEnabled(true);
		}
		super.repaint();
	}


	public static PanelEdicion getPanelEdicion() {
		return panelEdicion;
	}

	public static PanelInfo getPanelInfo() {
		return panelInfo;
	}
	
	public static BarraHerramientas getBarraHerramientas() {
		return barraHerramientas;
	}
	
	public void setLanguage(String l) {
		language = l;
	}

}