package BodegaPOS;

import java.io.*;
import java.util.Scanner;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

import java.util.*;
import java.awt.*;
import java.awt.event.*;


public class ClienteThread extends Thread{

        private DefaultListModel modelo;
        
        private JList Lista;
        private JButton Imprimir;
        private JButton Borrar;
        private JButton Conectar;
        
	private Socket socket ;
	private String ip_cliente;	
	public boolean conectado;
	private BufferedReader in = null;
	public boolean cerradoCorrectamente;
        private ArrayList<Solicitud> solicitud = new ArrayList<Solicitud>();

	public static final int ACTUALIZAR_TODO = 100;
	public static final int ACTUALIZAR_USUARIOS = 101;
	public static final int ACTUALIZAR_CONFIG = 102;
	public static final int PROBAR_CONEXION = 103;
	public static final int REINICIAR = 104;
	public static final int PUERTO_COM = 23;

	public ClienteThread(String ip_cliente, DefaultListModel modelo, ArrayList<Solicitud> solicitud,JButton Borrar,JButton Imprimir,JList Lista, JButton Conectar){
		this.setPriority(1);	
                this.modelo = modelo;
		this.ip_cliente = ip_cliente;
		this.conectado = false;
		this.cerradoCorrectamente = false;
                this.solicitud = solicitud;
                
                this.Borrar = Borrar;
                this.Lista = Lista;
                this.Imprimir = Imprimir;
                this.Conectar = Conectar;
                
                try {			
                        modelo.removeAllElements();
                        modelo.addElement("Estableciendo Conexion con: "+ip_cliente+"......");                       
			this.socket = new Socket( this.ip_cliente,PUERTO_COM); // se conecta con el cliente                        
                        modelo.addElement("Conexion Establecida "+ip_cliente);
                        this.conectado = true;
		} catch (UnknownHostException e) {
			this.conectado = false;
			modelo.addElement("Error de Conexión: Host: "+ip_cliente+" Inalcanzable");
			e.printStackTrace();
                        
		}  catch (SocketException e) {			
			this.conectado = false;
			modelo.addElement("Error de Socket: "+e.toString() );
                        e.printStackTrace();
                        
		}catch (IOException e) {
                        this.conectado = false;
			e.printStackTrace();
                        
		}
		finally{			                                            
		}
	}         


	public void  run(){		            
            modelo.removeAllElements();
            solicitud.clear();
            try {
                File fFile = new File("C:\\Users\\Sebastian\\Documents\\NetBeansProjects\\DesktopApplication1\\src\\desktopapplication1\\items.txt");
                Scanner scanner = new Scanner(fFile);
                String texto;
                while ( scanner.hasNextLine() ){
                      texto = scanner.nextLine();
                      Scanner scanner2 = new Scanner(texto);
                      scanner2.useDelimiter("-");
                      
                      Solicitud sol = new Solicitud();
                      sol.id = scanner2.next();
                      sol.nombre =scanner2.next();
                      modelo.addElement(sol.id+"-"+sol.nombre);
                      while ( scanner2.hasNext() ){
                          sol.nombreitem.add(scanner2.next());
                          sol.cantidaditem.add(scanner2.next());
                          sol.iditem.add(scanner2.next());
                      }
                      solicitud.add(sol);
                }
            }catch(Exception e){
                
            }
            /*
            String entrada = null;                
		if(this.conectado)
			try{
				this.in = new BufferedReader(
						new InputStreamReader(this.socket.getInputStream()), 1);

				while(this.socket.isConnected()){
					if((entrada  = in.readLine())!= null){}
				//		this.protocolo.procesarEntrada(entrada);

					if(this.socket.isClosed()){
						this.socket.shutdownInput();
						this.socket.shutdownOutput();
                                                this.conectado=false;
						modelo.removeAllElements();
                                                modelo.addElement("Se Desconectó Correctamente del Servidor.");
						break;
					}
				}
			}catch(NullPointerException e){
                            this.conectado=false;
                            modelo.removeAllElements();
                            modelo.addElement("Error: Se desconectó del Servidor.");
			} 
			catch (SocketException e) {
                            this.conectado=false;
                            modelo.removeAllElements();
                            modelo.addElement("Error: Se desconectó del Servidor.");
	
			}catch (IOException e) {
                            this.conectado=false;
                            modelo.removeAllElements();
                            modelo.addElement("Error: Se desconectó del Servidor.");
                            e.printStackTrace();
			}
                if(this.conectado==false){                    
                    Borrar.setEnabled(false);
                    Imprimir.setEnabled(false);
                    Lista.setEnabled(false);
                    Conectar.setEnabled(true);
                    solicitud.clear();
                }
            */
	}
}
