#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "posix_sockets.h"

extern char *remote_ip_address;

void Usage(void){
	printf("./test c/l ip port\n");
	printf("c for connect, l for listen\n");
	printf("no ip needed for l\n");
}

int main(int argc, char **argv){
	//argv[3];
	int sockfd_listen;
	int sockfd_connect;
	int isclient = 0;
	int len = 1024;
	int connected = 0;
	
	char ip_connect[47];

	char port_listen[32];
	char port_connect[32];

	char msg[1025];
	char type[2];
	
	(void)strcpy(type, (const char*)argv[1]);

printf("type: %s\n", type);

	if( type[0] == 'c'){
		isclient = 1;
		//MAKE CONNECTION (client)
	}else if( type[0] == 'l'){
		isclient = 0;
	}else{
		printf("wrong usage!\n");
		Usage();
		return 1;
	}
		//(void)strcpy(ip_connect, (const char*)argv[2]);

		if(isclient){
			(void)strcpy(ip_connect, (const char*)argv[2]);
			(void)sprintf(port_connect, "%d", atoi(argv[3]) );
			(void)sprintf(port_listen, "%d", atoi(argv[3])  +1 );
			sockfd_listen = Net_Listen((const char *)port_listen);
			sockfd_connect = Net_Connect((const char *)ip_connect, (const char *)port_connect);
			connected = 1;
			//(void)strcpy(msg, (const char *)my_ip_address);

			//printf("connecting...\n");
			//if(Send_Message(sockfd_connect, (const char *)msg, len) != 0){
			//	printf("send message error, exiting!\n");
			//	return 1;
			//}
		}else{
			(void)sprintf(port_connect, "%d", atoi(argv[3]) +1 );
			(void)sprintf(port_listen, "%d", atoi(argv[3])  );

			sockfd_listen = Net_Listen((const char *)port_listen);

			//printf("waiting for a connection...\n");

			//if(Recv_Message(sockfd_listen, (const char *)msg, len) != 0){
			//	printf("recv message error, exiting!\n");
			//	return 1;
			//}

//			(void)strncpy(ip_connect, (const char *)msg, 46);
//printf("received remote ip: %s\n", msg);
//printf("establishing handshake\n");
			//(void)sprintf(ip_connect, "%d", msg );
//			sockfd_connect = Net_Connect((const char *)ip_connect, (const char *)port_connect);
		}

		//(void)strcpy(port_connect, (const char*)argv[3]);
		//sockfd_listen = Net_Listen((const char *)port_listen);
		//sockfd_connect = Net_Connect((const char *)ip_connect, (const char *)port_connect);
		//sockfd_listen = Net_Listen((const char *)port_listen);


/*
	}else if( type[0] == 'l'){
		//WAKE FOR CONNECTION (server)
		(void)strcpy(ip, (const char*)argv[2]);
		(void)strcpy(port, (const char*)argv[3]);
		//sockfd = Net_Listen((const char *)port);


	}else{
		printf("wrong usage!\n");
		Usage();
		return 1;
	}

*/
//	printf("connected!\n");

	printf("you've entered the following:\n");
	printf("arguments: %d\n", argc);
//	printf("remote ip: %s\n", ip_connect); 
	printf("port: %s(listen)/%s(connect)\n", port_listen, port_connect);
//	printf("your ip: %s\n", my_ip_address);
	printf("isclient: %d\n", isclient);

	while(1 == 1){
		if(isclient){
			printf("\nEnter Message:");
			if( fgets(msg, len, stdin) == NULL ){
				//if(gets(msg) == NULL){
				printf("fgets error!\n");
				return 1;
			}
			//if(!connected){
			//	sockfd_connect = Net_Connect((const char *)ip_connect, (const char *)port_connect);
			//	connected = 1;
			//}

			//sockfd_connect = Net_Connect((const char *)ip, (const char *)port_connect);
			if(Send_Message(sockfd_connect, (const char *)msg, len) != 0){
				printf("send message error, exiting!\n");
				return 1;
			}
		}else{
			//sockfd = Net_Listen((const char *)port);

			if(Recv_Message(sockfd_listen, (const char *)msg, len) != 0){
				printf("recv message error, exiting!\n");
				return 1;
			}


			if(!connected){
				//if(Grab_Remote_IP(sockfd_listen) != 0){
				//	printf("Grab_Remote_IP() failure!\n");
				//	return 1;
				//}
printf("here 1\n");
				(void)strcpy(ip_connect, (const char *)remote_ip_address);
printf("here 2\n");
				sockfd_connect = Net_Connect((const char *)ip_connect, (const char *)port_connect);
				connected = 1;
			}
		}
		if(isclient)
			isclient=0;
		else
			isclient=1;
	}

	return 0;
}
