import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.io.*;
import java.util.Scanner;
import java.lang.*;
import java.awt.event.*;

public class GestionPanel extends JPanel {

   private String product;
	private int cant = 0;
	private JLabel precioCantLabel, VLabel, VLabelN, RLabel, CLabel1, CLabel2;
	private JLabel subtotal, descuento, iva, total, resumenTipo1, resumenTipo2;
	private JTable resumenVentas;
	private JPanel pVentasD, pVentasI, pClientesD, pClientesI, resumenTipo;
	private JComponent componentResumen, componentTipos;
	private JComboBox prodCBox, tipoCBox;
	private JTextField cantTField;
	private JScrollPane scrollRPane, scrollTPane;
	private JList list;
   //private String resumen, resumenTipos;
	private String tipoCliente;
	private Ventas ventaActual;
	private Archivo ar;
	private final int tipoMinimo = 1;
	private final int tipoMaximo = 3;
	private final int rutMinimo = 10000000;
	private final int rutMaximo = 999999999;

   public GestionPanel(Ventas v)
	{
	   super(new BorderLayout());
		ar = new Archivo();
		ventaActual = v;
		JTabbedPane tabbedPane = new JTabbedPane();
      pVentasD = panelVD();
		pVentasI = panelVI();
      JSplitPane panelVentas = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,pVentasI, pVentasD);
      panelVentas.setDividerLocation(0.5);
		panelVentas.setContinuousLayout(true);    
		tabbedPane.addTab("Ventas", panelVentas);
      
		pClientesD = panelCD();
		pClientesI = panelCI();
      JSplitPane panelClientes = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,pClientesI, pClientesD);
      panelVentas.setDividerLocation(0.5);
		panelVentas.setContinuousLayout(true); 
		tabbedPane.addTab("Ver Clientes", panelClientes);

      //Add tabbedPane to this panel.
      add(tabbedPane, BorderLayout.CENTER);
	}
	
	public void setVenta(Ventas v)
	{
	   ventaActual = v;
	}
	
	private JPanel panelVI()
	{
		JLabel VLabel0 = new JLabel("     ");
		JLabel VLabel1 = new JLabel("     ");
		JLabel VLabel2 = new JLabel("     ");
		JLabel VLabel3 = new JLabel("     ");
		VLabel = new JLabel("RUT Cliente : "+ventaActual.getCliente().getRut());
		//VLabel.setAlignmentX(BOTTOM_ALIGNMENT);
		
		
		// Panel de la Cantidad
		JPanel panelCant = new JPanel();
		panelCant.setLayout(new BoxLayout(panelCant, BoxLayout.Y_AXIS));
	   
		JLabel cantLabel = new JLabel("Cantidad");
		cantLabel.setAlignmentX(CENTER_ALIGNMENT);
		cantTField = new JTextField();
		cantTField.setAlignmentX(CENTER_ALIGNMENT);
		Dimension size = new Dimension(90,30); //ancho, alto
      cantTField.setMaximumSize(size);
      cantTField.setPreferredSize(size);
      cantTField.setMinimumSize(size);
		
		cantTField.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event)
         {
            product = prodCBox.getSelectedItem().toString();   
				cant = Integer.parseInt(cantTField.getText());
				if(cant<=0)
				{
				   JOptionPane.showMessageDialog(null,"Ingrese un numero válido.");		
					//cant = 0;
				}
				else
				{   
			   precioCantLabel.setText("$ " + cant*ar.leerPrecio(product));
				}
				System.out.println("Reconoce Seleccion de Producto!"); /////////
	      }
		});
		
		panelCant.add(cantLabel);
		panelCant.add(cantTField);


		// Panel del Producto
		JPanel panelProd = new JPanel();
		panelProd.setLayout(new BoxLayout(panelProd, BoxLayout.Y_AXIS));
	 
		// Creacion del JComboBox y s añaden los items
		JLabel prodLabel = new JLabel("Producto");
		prodLabel.setAlignmentX(CENTER_ALIGNMENT);
		prodCBox = new JComboBox();
		prodCBox.setAlignmentX(CENTER_ALIGNMENT);
		size = new Dimension(100,30); //ancho, alto
      prodCBox.setMaximumSize(size);
      prodCBox.setPreferredSize(size);
      prodCBox.setMinimumSize(size);
		
		for(int i=0; i<ar.leerProductos().size(); i++)
		   prodCBox.addItem(ar.leerProductos().get(i));
		
		
		// Accion a realizar cuando el JComboBox cambia de item seleccionado.
		prodCBox.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event)
         {
            product = prodCBox.getSelectedItem().toString();   
				cant = Integer.parseInt(cantTField.getText());
				if(cant<=0)
				{
				   JOptionPane.showMessageDialog(null,"Ingrese una cantidad válida.");
					//cant = 0;
				}
				else
				{   
			   precioCantLabel.setText("$ " + cant*ar.leerPrecio(product));
				}
				System.out.println("Reconoce Seleccion de Producto!"); /////////
	      }
		});
     
	  	  
	   panelProd.add(prodLabel);
		panelProd.add(prodCBox);
		
		
		// Panel del Precio
		JPanel panelPrecio = new JPanel();
		panelPrecio.setLayout(new BoxLayout(panelPrecio, BoxLayout.Y_AXIS));
	   
		JLabel precioLabel = new JLabel("Precio");
		precioLabel.setAlignmentX(CENTER_ALIGNMENT);
		precioCantLabel = new JLabel("$ 0");
		precioCantLabel.setAlignmentX(CENTER_ALIGNMENT);
		size = new Dimension(100,30); //ancho, alto
      precioCantLabel.setMaximumSize(size);
      precioCantLabel.setPreferredSize(size);
      precioCantLabel.setMinimumSize(size);
			
		panelPrecio.add(precioLabel);
		panelPrecio.add(precioCantLabel);
		
		
		// Panel que contiene el Producto, la Cantidad y el Precio
		JPanel panelProductos = new JPanel();
		panelProductos.setLayout(new BoxLayout(panelProductos, BoxLayout.X_AXIS));
	   panelProductos.add(panelCant);  
		panelProductos.add(panelProd);
		panelProductos.add(panelPrecio);
		
		
		// Boton Agregar
    	JButton botonAgregar = new JButton("Agregar");
		botonAgregar.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event)
         {
            product = prodCBox.getSelectedItem().toString();   
				cant = Integer.parseInt(cantTField.getText());
				if(cant<=0)
				{
				   JOptionPane.showMessageDialog(null,"Ingrese una cantidad válida.");
				}
				else
				{
				ventaActual.agregaProducto(new Producto(product,cant));
				VLabel.setText("RUT Cliente : "+ventaActual.getCliente().getRut());
				VLabelN.setText("RUT Cliente : "+ventaActual.getCliente().getRut());
				componentResumen.remove(scrollRPane);
				resumenVentas = new JTable(ventaActual.getResumen(), ventaActual.getColumnasResumen());
            resumenVentas.setPreferredScrollableViewportSize(new Dimension(350, 200));
				resumenVentas.setShowGrid(false);
            resumenVentas.setFillsViewportHeight(true);
		      resumenVentas.setAlignmentX(CENTER_ALIGNMENT);
		      scrollRPane = new JScrollPane(resumenVentas);
				scrollRPane.setAlignmentX(CENTER_ALIGNMENT);
		 	   componentResumen.add(scrollRPane, 1);
				
				subtotal.setText("SubTotal : $"+ventaActual.getSubTotal());
		      descuento.setText("Descuento : $"+ventaActual.getDescuentoTotal());
		      iva.setText("Impuesto : $"+(int)(0.19*ventaActual.getTotal()));
		      total.setText("TOTAL : $"+(int)(1.19*ventaActual.getTotal()));
				
				componentResumen.validate();
				System.out.println("Reconoce el boton!"); /////////
				}
		   }
		});
      botonAgregar.setAlignmentX(BOTTOM_ALIGNMENT);
		
		
		// Boton Nueva Venta
    	JButton botonVenta = new JButton("Nueva Venta");
		botonVenta.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event)
         {
			   Scanner scan;
		      do{
  	         scan = new Scanner(JOptionPane.showInputDialog("Ingrese el rut del Cliente sin puntos ni guión:"));
	         }while(!scan.hasNextInt()&&scan.nextInt()>=rutMinimo&&scan.nextInt()<=rutMaximo);
       		String rut = ""+scan.nextInt();
		
		      if(!ar.buscaRut(rut))
	         {
	            do{
  	               scan = new Scanner(JOptionPane.showInputDialog("Ingrese el Tipo de Cliente:\n(Entero entre "+tipoMinimo+" y "+tipoMaximo+")."));
	            }while(!scan.hasNextInt()&&scan.nextInt()>=tipoMinimo&&scan.nextInt()<=tipoMaximo);
		      	int tipo = scan.nextInt();   
	      		ar.saveRut(rut, tipo);
	         }
		
		      ventaActual = new Ventas(rut);
				VLabel.setText("RUT Cliente : "+ventaActual.getCliente().getRut());
				VLabelN.setText("RUT Cliente : "+ventaActual.getCliente().getRut());
				//pVentasI.validate();		
		
		      System.out.println("Ingresa Clientes!!!"); /////////
         }
		});
      botonVenta.setAlignmentX(BOTTOM_ALIGNMENT);

		
		
		// Agregar todos los subpaneles
		String title;
      title = "Ventas";
            
      JPanel pane = new JPanel();
      pane.setBorder(BorderFactory.createTitledBorder(title));
      pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
      
		pane.add(botonVenta);
		pane.add(VLabel0);
		pane.add(VLabel1);
		pane.add(VLabel);
		pane.add(VLabel2);
		pane.add(panelProductos);
		pane.add(VLabel3);
      pane.add(botonAgregar);
      return pane; 
		
	}	

   private JPanel panelVD()
	{
	    JPanel pane = new JPanel();
       
		 String[] columnNames = ventaActual.getColumnasResumen();
		 Object[][] data = ventaActual.getResumen();
       
		 resumenVentas = new JTable(data, columnNames);
       resumenVentas.setPreferredScrollableViewportSize(new Dimension(350, 200));
		 resumenVentas.setShowGrid(false);
       resumenVentas.setFillsViewportHeight(true);
		 resumenVentas.setAlignmentX(CENTER_ALIGNMENT);
		 scrollRPane = new JScrollPane(resumenVentas);
		 scrollRPane.setAlignmentX(CENTER_ALIGNMENT);
		 
				  
		 componentResumen = new JPanel();
		 componentResumen.setLayout(new BoxLayout(componentResumen, BoxLayout.Y_AXIS));
		 VLabelN = new JLabel("RUT Cliente : "+ventaActual.getCliente().getRut());
		 VLabelN.setAlignmentX(BOTTOM_ALIGNMENT);
		 componentResumen.add(VLabelN, 0);
		 componentResumen.add(scrollRPane, 1);
       Dimension size = new Dimension(400,600); //ancho, alto
       componentResumen.setMaximumSize(size);
       componentResumen.setPreferredSize(size);
       componentResumen.setMinimumSize(size);
		 String resumen = "RESUMEN"; //actualizar
       TitledBorder border = new TitledBorder(
                                  new LineBorder(Color.black),
                                  resumen,
                                  TitledBorder.CENTER,
                                  TitledBorder.BELOW_TOP);
       border.setTitleColor(Color.black);
       componentResumen.setBorder(border);
		 
		 subtotal = new JLabel("SubTotal : $"+ventaActual.getSubTotal());
		 subtotal.setAlignmentX(BOTTOM_ALIGNMENT);
		 descuento = new JLabel("Descuento : $"+ventaActual.getDescuentoTotal());
		 descuento.setAlignmentX(BOTTOM_ALIGNMENT);
		 iva = new JLabel("Impuesto : $"+(int)(0.19*ventaActual.getTotal()));
		 iva.setAlignmentX(BOTTOM_ALIGNMENT);
		 total = new JLabel("TOTAL : $"+(int)(1.19*ventaActual.getTotal()));
		 total.setAlignmentX(BOTTOM_ALIGNMENT);
		 
		 componentResumen.add(new JLabel(" "), 2);
		 componentResumen.add(subtotal, 3);
		 componentResumen.add(descuento, 4);
		 componentResumen.add(iva, 5);
		 componentResumen.add(total, 6);
		 componentResumen.add(new JLabel(" "), 7);
		 componentResumen.add(new JLabel(" "), 8);
		 
       //JLabel label = new JLabel("This is a JLabel");
       String title;
		 title = "RESUMEN DE VENTAS";
       //label.setAlignmentX(CENTER_ALIGNMENT);
    
       pane.setBorder(BorderFactory.createTitledBorder(title));
       pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
       //pane.add(label);
       pane.add(componentResumen);
       //pane.add(scrollRPane);
		 return pane;
	}	

   private JPanel panelCI()
	{
	   JLabel tipoLabel = new JLabel("Seleccione el Tipo de Cliente");
		tipoLabel.setAlignmentX(CENTER_ALIGNMENT);
		
		tipoCBox = new JComboBox();
		Dimension size = new Dimension(100,30); //ancho, alto
      tipoCBox.setMaximumSize(size);
      tipoCBox.setPreferredSize(size);
      tipoCBox.setMinimumSize(size);
		
		for(int i=0; i<ar.leerTiposClientes().size(); i++)
		   tipoCBox.addItem(ar.leerTiposClientes().get(i));
		
		
		// Accion a realizar cuando el JComboBox cambia de item seleccionado.
		tipoCBox.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event)
         {
            tipoCliente = tipoCBox.getSelectedItem().toString();
				int tip = Integer.parseInt(tipoCliente.substring(1));
				
				CLabel1.setText("Clientes Tipo : "+tipoCliente);
				CLabel2.setText("Descuento Asignado : "+(int)(100*ar.leerDescuento(tip))+" %");
				
				list.setListData(ventaActual.getClientes(tip)); 
				
				System.out.println("Reconoce Seleccion de Tipo: "+tip); /////////
	      }
		});
		
      tipoCBox.setAlignmentX(CENTER_ALIGNMENT);
      
		String title;
      title = "Tipos de Clientes";
		
      JPanel pane = new JPanel();
      pane.setBorder(BorderFactory.createTitledBorder(title));
      pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
      pane.add(tipoLabel);    
		pane.add(tipoCBox);
      return pane;
	
	}

   private JPanel panelCD()
	{
	    JPanel pane = new JPanel();
		 
		 int defecto = 3;
		 tipoCliente = ""+defecto;
	  
		 resumenTipo1 = new JLabel(ventaActual.getColumnasTipos());
		 resumenTipo1.setAlignmentX(CENTER_ALIGNMENT);
		 
		 
		 
       //Create the list and put it in a scroll pane.
       list = new JList(ventaActual.getClientes(defecto));
		 list.setAlignmentX(CENTER_ALIGNMENT);
       list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
       list.setSelectedIndex(0);
       list.setVisibleRowCount(10);
		 
		 //resumenTipo.setPreferredScrollableViewportSize(new Dimension(350, 500));
		 
		 		 
		 scrollTPane = new JScrollPane(list);
		//scrollTPane.setLayout(new BoxLayout(scrollTPane, BoxLayout.Y_AXIS));
		 scrollTPane.setAlignmentX(CENTER_ALIGNMENT);
		 
		 
		 resumenTipo = new JPanel();
		 resumenTipo.setLayout(new BoxLayout(resumenTipo, BoxLayout.Y_AXIS));
		 resumenTipo.add(resumenTipo1);
       resumenTipo.add(scrollTPane);
		 resumenTipo.setAlignmentX(CENTER_ALIGNMENT);
		 

        componentTipos = new JPanel();
		  componentTipos.setLayout(new BoxLayout(componentTipos, BoxLayout.Y_AXIS));
		  CLabel1 = new JLabel("Clientes Tipo : ");
		  CLabel1.setAlignmentX(CENTER_ALIGNMENT);
		  CLabel2 = new JLabel("Descuento Asignado : 0 %");
		  CLabel2.setAlignmentX(CENTER_ALIGNMENT);
		  componentTipos.add(CLabel1);
		  componentTipos.add(CLabel2);
		  componentTipos.add(resumenTipo);
        Dimension size = new Dimension(400,400); //ancho, alto
        componentTipos.setMaximumSize(size);
        componentTipos.setPreferredSize(size);
        componentTipos.setMinimumSize(size);
		  String resumenTipos = "RESUMEN DE CLIENTES POR TIPO"; //actualizar
        TitledBorder border = new TitledBorder(
                                  new LineBorder(Color.black),
                                  resumenTipos,
                                  TitledBorder.CENTER,
                                  TitledBorder.BELOW_TOP);
        border.setTitleColor(Color.black);
        componentTipos.setBorder(border);
        
		  
        //JLabel label = new JLabel("This is a JLabel");
        String title;
		  title = "RESUMEN DE CLIENTES";

        //label.setAlignmentX(CENTER_ALIGNMENT);
    
        pane.setBorder(BorderFactory.createTitledBorder(title));
        pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
        //pane.add(label);
        pane.add(componentTipos);
        return pane;
	}	

   
}	