import socket
import sys
import fileinput
import os
import logging.handlers
import logging
import subprocess


#INICIALIZACAO
CLIENT_NAME = ""
CLIENT_IP = ""
SERVER_IP = ""

logger = logging.getLogger('tests')
logger.setLevel(logging.DEBUG)

CLIENT_PORT=12000

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',12000))
process = None

#setlogger()



class RootFilter(logging.Filter):
	"""
	This is a filter which injects contextual information into the log.

	Rather than use actual contextual information, we just use random
	data in this demo.
	"""
	def __init__(self, router_name, tree=''):
		super().__init__()
		self.router_name = router_name

	def filter(self, record):
		record.routername = self.router_name
		record.tree = ''
		record.vif = ''
		record.interfacename = ''
		return True


def setLogger():
	global logger
	print("in setting logger")
	#logger.addHandler(logging.StreamHandler(sys.stdout))
	socketHandler = logging.handlers.SocketHandler(SERVER_IP, logging.handlers.DEFAULT_TCP_LOGGING_PORT)
	socketHandler.addFilter(RootFilter(CLIENT_NAME))
	logger.addHandler(socketHandler)

def sendTo_logger(message):
	global logger
	print("Message to server: " + message)
	logger.debug(message)


def settings(client_name, server_ip):
	global CLIENT_NAME
	CLIENT_NAME = client_name

	global SERVER_IP
	SERVER_IP = server_ip

	setLogger()


def start_process():
	global process
	command = "python3 server.py -i eth0 -a"
	sendTo_logger(command)
	process = subprocess.Popen(command.split())


def stop_process():
	global process
	command = "kill python3 server.py"
	sendTo_logger(command)
	process.kill()


while True:
	try:
		(msg,addr) = sock.recvfrom(1024)
		msg = msg.decode('utf-8')
		cmds = msg.split()
		if cmds[0] == "set" and len(cmds) == 3:
			settings(cmds[1], cmds[2])
		elif cmds[0] == "start":
			start_process()
		elif cmds[0] == "stop":
			stop_process()
	except:
		pass
sock.close()