package tutorialJava.capitulo9_AWT_SWING.ejemplos.ejemplo01_Fabricante.vista;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import tutorialJava.capitulo9_AWT_SWING.ejemplos.ejemplo01_Fabricante.controlador.ControladorFabricante;
import tutorialJava.capitulo9_AWT_SWING.ejemplos.ejemplo01_Fabricante.modelo.Fabricante;

import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.GridBagConstraints;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextField;
import javax.swing.JButton;

public class VentanaGestionFabricante extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField jtfId;
	private JTextField jtfNombre;
	private JTextField jtfCif;
	private JButton btnPrimero;
	private JButton btnAnterior;
	private JButton btnSiguiente;
	private JButton btnUltimo;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VentanaGestionFabricante frame = new VentanaGestionFabricante();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaGestionFabricante() {
		setTitle("Gestión de Fabricantes");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 317, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		GridBagLayout gbl_contentPane = new GridBagLayout();
		gbl_contentPane.columnWidths = new int[]{0, 0, 0};
		gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0};
		gbl_contentPane.columnWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
		gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		contentPane.setLayout(gbl_contentPane);
		
		JLabel lblNewLabel = new JLabel("Gestión de Fabricantes");
		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 16));
		GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
		gbc_lblNewLabel.gridwidth = 2;
		gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0);
		gbc_lblNewLabel.gridx = 0;
		gbc_lblNewLabel.gridy = 0;
		contentPane.add(lblNewLabel, gbc_lblNewLabel);
		
		JPanel panel = new JPanel();
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.gridwidth = 2;
		gbc_panel.insets = new Insets(0, 0, 5, 0);
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.gridx = 0;
		gbc_panel.gridy = 1;
		contentPane.add(panel, gbc_panel);
		
		btnPrimero = new JButton("Primero");
		btnPrimero.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				mostrarFabricanteEnPantalla(
						ControladorFabricante.getPrimero());				
			}
		});
		panel.add(btnPrimero);
		
		btnAnterior = new JButton("Anterior");
		btnAnterior.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				mostrarFabricanteEnPantalla(
						ControladorFabricante.getAnterior(
								Integer.parseInt(jtfId.getText())));
			}
		});
		panel.add(btnAnterior);
		
		btnSiguiente = new JButton("Siguiente");
		btnSiguiente.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				mostrarFabricanteEnPantalla(
						ControladorFabricante.getSiguiente(
								Integer.parseInt(jtfId.getText())));
			}
		});
		panel.add(btnSiguiente);
		
		btnUltimo = new JButton("Último");
		btnUltimo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				mostrarFabricanteEnPantalla(
						ControladorFabricante.getUltimo());				
			}
		});
		panel.add(btnUltimo);
		
		JLabel lblNewLabel_1 = new JLabel("Id:");
		GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
		gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5);
		gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST;
		gbc_lblNewLabel_1.gridx = 0;
		gbc_lblNewLabel_1.gridy = 2;
		contentPane.add(lblNewLabel_1, gbc_lblNewLabel_1);
		
		jtfId = new JTextField();
		jtfId.setEnabled(false);
		GridBagConstraints gbc_jtfId = new GridBagConstraints();
		gbc_jtfId.insets = new Insets(0, 0, 5, 0);
		gbc_jtfId.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtfId.gridx = 1;
		gbc_jtfId.gridy = 2;
		contentPane.add(jtfId, gbc_jtfId);
		jtfId.setColumns(10);
		
		JLabel lblNewLabel_2 = new JLabel("Nombre:");
		GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints();
		gbc_lblNewLabel_2.anchor = GridBagConstraints.EAST;
		gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5);
		gbc_lblNewLabel_2.gridx = 0;
		gbc_lblNewLabel_2.gridy = 3;
		contentPane.add(lblNewLabel_2, gbc_lblNewLabel_2);
		
		jtfNombre = new JTextField();
		GridBagConstraints gbc_jtfNombre = new GridBagConstraints();
		gbc_jtfNombre.insets = new Insets(0, 0, 5, 0);
		gbc_jtfNombre.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtfNombre.gridx = 1;
		gbc_jtfNombre.gridy = 3;
		contentPane.add(jtfNombre, gbc_jtfNombre);
		jtfNombre.setColumns(10);
		
		JLabel lblNewLabel_3 = new JLabel("CIF:");
		GridBagConstraints gbc_lblNewLabel_3 = new GridBagConstraints();
		gbc_lblNewLabel_3.anchor = GridBagConstraints.EAST;
		gbc_lblNewLabel_3.insets = new Insets(0, 0, 5, 5);
		gbc_lblNewLabel_3.gridx = 0;
		gbc_lblNewLabel_3.gridy = 4;
		contentPane.add(lblNewLabel_3, gbc_lblNewLabel_3);
		
		jtfCif = new JTextField();
		GridBagConstraints gbc_jtfCif = new GridBagConstraints();
		gbc_jtfCif.insets = new Insets(0, 0, 5, 0);
		gbc_jtfCif.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtfCif.gridx = 1;
		gbc_jtfCif.gridy = 4;
		contentPane.add(jtfCif, gbc_jtfCif);
		jtfCif.setColumns(10);
		
		JPanel panel_1 = new JPanel();
		GridBagConstraints gbc_panel_1 = new GridBagConstraints();
		gbc_panel_1.weighty = 1.0;
		gbc_panel_1.gridwidth = 2;
		gbc_panel_1.insets = new Insets(0, 0, 0, 5);
		gbc_panel_1.fill = GridBagConstraints.BOTH;
		gbc_panel_1.gridx = 0;
		gbc_panel_1.gridy = 5;
		contentPane.add(panel_1, gbc_panel_1);
		
		JButton btnNewButton_4 = new JButton("Guardar");
		btnNewButton_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				guardar();
			}
		});
		panel_1.add(btnNewButton_4);
		
		JButton btnNewButton_5 = new JButton("Nuevo");
		btnNewButton_5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				nuevo();
			}
		});
		panel_1.add(btnNewButton_5);
		
		JButton btnNewButton_6 = new JButton("Eliminar");
		btnNewButton_6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				eliminar();
			}
		});
		panel_1.add(btnNewButton_6);
		
		
		mostrarFabricanteEnPantalla(ControladorFabricante.getPrimero());
	}

	
	/**
	 * 
	 * @param f
	 */
	private void mostrarFabricanteEnPantalla(Fabricante f) {
		if (f != null) {
			jtfId.setText("" + f.getId());
			jtfNombre.setText(f.getNombre());
			jtfCif.setText(f.getCif());
			
			// Compruebo si existe un siguiente
			boolean existeSiguiente = 
					ControladorFabricante.getSiguiente(f.getId()) != null;
			this.btnSiguiente.setEnabled(existeSiguiente);
			this.btnUltimo.setEnabled(existeSiguiente);

			// Compruebo si existe un anterior
			boolean existeAnterior = 
					ControladorFabricante.getAnterior(f.getId()) != null;
			this.btnAnterior.setEnabled(existeAnterior);
			this.btnPrimero.setEnabled(existeAnterior);
		
		}
	}
	
	
	private Fabricante getDesdePantalla() {
		Fabricante f = new Fabricante();
		f.setId(Integer.parseInt(this.jtfId.getText()));
		f.setNombre(this.jtfNombre.getText());
		f.setCif(this.jtfCif.getText());
		return f;
	}
	
	
	private void guardar() {
		int regModificados;
		
		Fabricante f = getDesdePantalla();
		
		if (f.getId() == 0) { // Es una inserción
			regModificados = 
					ControladorFabricante.insertaFabricante(getDesdePantalla());
			mostrarFabricanteEnPantalla(ControladorFabricante.getUltimo());
		}
		else {
			regModificados = 
					ControladorFabricante.modificaFabricante(getDesdePantalla());
		}
		
		if (regModificados > 0) {
			JOptionPane.showMessageDialog(null, "Registro modificado");
		}
		else {
			JOptionPane.showMessageDialog(null, "Error en la modificación");
		}
	}
	
	/**
	 * 
	 */
	private void nuevo() {
		this.jtfId.setText("0");
		this.jtfNombre.setText("");
		this.jtfCif.setText("");
	}
	
	
	/**
	 * 
	 */
	private void eliminar() {
		String [] opciones ={"Sí","No"};
		int eleccion = JOptionPane.showOptionDialog(null,"¿Desea eliminar el registro?",
		"Confirmación",
		JOptionPane.YES_NO_OPTION,
		JOptionPane.QUESTION_MESSAGE, null, opciones, "No");
		if (eleccion == JOptionPane.YES_OPTION) {
			// Realmente elimino
			int idFabricante = Integer.parseInt(this.jtfId.getText());
			
			if (ControladorFabricante.eliminaFabricante(idFabricante) > 0) {
				// Navego al anterior, si existe
				Fabricante anterior = 
						ControladorFabricante.getAnterior(idFabricante);
				if (anterior != null) { // Existe un anterior
					mostrarFabricanteEnPantalla(anterior);
				}
				else { // No existe anterior
					Fabricante siguiente = 
							ControladorFabricante.getSiguiente(idFabricante);
					if (siguiente != null) { // Existe un siguiente
						mostrarFabricanteEnPantalla(siguiente);
					}
					else { // No existe siguiente ni anterior, no queda na
						nuevo();
					}
				}
				
				JOptionPane.showMessageDialog(null, "Registro eliminado");
				
			}
			else {
				JOptionPane.showMessageDialog(null, "Error en la eliminación");
			}
		}

		
		
	}
}











