import java.io.*;
import java.net.*;
import javax.swing.*;

/**
 * Clase principal del cliente de chat. Inicializa la conexion y crea el frame de la
 * interfaz grafica.
 * @author Luis Fuentes Weber
 *
 */
public class ChatClient extends JFrame{
    private clientPane ClientPane;

    /**
     * Constructor del frame. Setea el titulo e inicializa el panel
     */
    public ChatClient(){
        setTitle("Chat Client");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        ClientPane = new clientPane();
        add(ClientPane);
        pack();
    }
    
    /**
    * Obtiene el panel del principal del frame.
    * @return Panel.
    */
    public clientPane getPane(){
        return ClientPane;
    }
    
    /**
     * Revisa los argumentos, e inicializa el frame y la conexion
     * con el servidor.
     * @param args Argumentos pasados al programa desde consola.
     */

    public static void main(String args[]){       
        
        String user = "";
        String host = "";
        
        int port = 0;

        ChatClient chatClient = new ChatClient();

        //Revision de argumentos
        if(args.length != 3){
            JOptionPane.showMessageDialog(chatClient, USAGE ,"Error",JOptionPane.ERROR_MESSAGE);
            System.exit(-3);
        } else {
            user = args[0];
            host = args[1];
            if ( (port = Integer.parseInt(args[2])) < 1){
                JOptionPane.showMessageDialog(chatClient, USAGE ,"Error",JOptionPane.ERROR_MESSAGE);
                System.exit(-3);
            }            
        }

        sendListener sl = new sendListener(user);
        chatClient.getPane().addSendListener(sl);

        //Crea el panel y queda esuchando datos desde el servidor
        try {
            Socket s = new Socket(host, port);
            sl.updateData(s, chatClient.getPane());            
            
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String ins;
            
            while((ins = in.readLine()) != null){
                chatClient.getPane().updateMainText(ins);
            }

        } catch (UnknownHostException ex) {
            //No se encuentra el host
            JOptionPane.showMessageDialog(chatClient, "Couldn't find the host.","Error",JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        } catch (IOException ex) {
            //No se pudo establecer conexion
            JOptionPane.showMessageDialog(chatClient, "Couldn't connect to the server.","Error",JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }

    }

    private static String USAGE = "Usage:  java ChatClient [User_name] [host_server] [port]";

}


