#!/usr/bin/env python
import socket
from lxml import etree
	
def addfile(output,host,dport):
	ossim_data_xml = "<Add target=':idolbridge'><Image groupType='groundTexture'><filename>%s</filename> <id>%s</id><name>%s</name></Image></Add>" % (output,output,output)
	ossimdata = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	ossimdata.connect((host, int(dport)))
	ossimdata.send(ossim_data_xml)
	ossimdata.close()

	
def zoomto(lon,lat,distance,host,pport):
	ossim_zoom_xml = '<Set target=":navigator" vref="wgs84"><Camera><longitude>%s</longitude><latitude>%s</latitude><altitude>%s</altitude><heading>0</heading><pitch>0</pitch><roll>0</roll><altitudeMode>absolute</altitudeMode><range>%s</range></Camera></Set>' % (lon, lat, distance, distance)
	ossimposition = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	ossimposition.connect((host, int(pport)))  
	ossimposition.send(ossim_zoom_xml)
	ossimposition.close()

def removefile(output,host,dport):
	ossimdata = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	ossimdata.connect((host, int(dport)))
	ossim_data_xml = "<Remove target=':idolbridge' id='%s' />" % (output)
	ossimdata.send(ossim_data_xml)
	ossimdata.close()

	
def addzoom(output,lon,lat,distance,host,dport,pport):
	addfile(output,host,dport)
	zoomto(lon,lat,distance,host,pport)


def parseSignal(data):
	xmldoc = etree.fromstring(data)
	lon = xmldoc.xpath("//Camera/longitude/text()")
	lat = xmldoc.xpath("//Camera/latitude/text()")
	rl = xmldoc.xpath("//Camera/roll/text()")
	pit = xmldoc.xpath("//Camera/pitch/text()")
	head = xmldoc.xpath("//Camera/heading/text()")
	altitude = xmldoc.xpath("//Camera/altitude/text()")
	nav = {}
	nav['lon'] , nav['lat'] = float(lon[0]) , float(lat[0])
	nav['roll'] , nav['pitch'] , nav['gain'] , nav['msl'] = float(rl[0]), float(pit[0]), float(head[0]), float(altitude[0])
	#lon_idx, lat_idx = float(lon[0]) , float(lat[0]) 
	#rl, pit, head, altitude = float(rl[0]), float(pit[0]), float(head[0]), float(altitude[0])
	#datalist = []
	#datalist.append(lon_idx)
	#datalist.append(lat_idx)
	#datalist.append(rl)
	#datalist.append(pit)
	#datalist.append(head)
	#datalist.append(altitude)
	return nav


def navlogger(host,port):
	HOST = host
	PORT = port
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
	s.bind((HOST, PORT))
	s.listen(1)
	conn, addr = s.accept()
	print 'Connected by', addr
	data = conn.recv(1024)
	try :
		parsed = parseSignal(data)
		print parsed
		if not data:
			conn.close()
	except :
		print 'parse error'
	conn.close()




#addzoom('/data/florida/Brevard.tif',-81.0009,29.0009,15000,'localhost',8000,7000)
#removefile('/data/florida/Brevard.tif','localhost',8000)
