package tools;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.Socket;
import java.net.DatagramSocket;
import java.net.UnknownHostException;
import java.io.IOException;

/** Class to store hostnames + ports
* @author	Louis Royer
* @author	Flavien Haas
* @author	JS Auge
* @version	1.0
*/
public class HostItem {
	private String hostname;
	private int port;
	private Socket tcpSocket;
	private DatagramSocket udpSocket;

	/** Constructor with hostname and port
	 * @param hostname	Hostname
	 * @param port	Port
	 */
	public HostItem(String hostname, int port) {
		this.port = port;
		this.hostname = hostname;
	}

	/** Get TCP Socket.
	 * @return	TCP Socket
	 */
	public Socket getTCPSocket() {
		if (tcpSocket == null) {
			try {
				tcpSocket = new Socket(InetAddress.getByName(hostname), port);
			} catch (SocketException e) {
				System.err.println("Error: No TCP socket available.");
				System.exit(-1);
			} catch (UnknownHostException e) {
				System.err.println("Error: Unknown host.");
				System.exit(-1);
			} catch (IOException e) {
				System.err.println("Error: Cannot create TCP socket");
				System.exit(-1);
			}
		}
		return tcpSocket;
	}

	/** Closes tcp socket
	 */
	public void closeTCPSocket() {
		if (tcpSocket != null) {
			try {
				tcpSocket.close();
			} catch (IOException e2) {
				System.err.println("Error: cannot close socket");
			}
		}
		tcpSocket = null;
	}

	/** Get UDP Socket
	 * return	UDP Socket
	 */
	public DatagramSocket getUDPSocket() {
		if (udpSocket == null) {
			try {
				udpSocket = new DatagramSocket();
				udpSocket.connect(InetAddress.getByName(hostname), port);
			} catch (SocketException e) {
				System.err.println("Error: No UDP socket available.");
				System.exit(-1);
			} catch (UnknownHostException e) {
				System.err.println("Error: Unknown host.");
				System.exit(-1);
			}
		}
		return udpSocket;
	}
	public void closeUDPSocket() {
		if (udpSocket != null) {
			udpSocket.close();
		}
		udpSocket = null;
	}
}
