#!/usr/bin/env /home/scos/usr/local/bin/python
import os, sys
#sys.path.append("/home/scos/usr/local/lib/python2.5/site-packages")
#for param in os.environ.keys():
#    print "%20s %s" % (param,os.environ[param])

import Image, ImageDraw
import getopt
import pyfits
import shutil
import math
import datetime
import cStringIO
import urllib2
import numpy
from kapteyn import wcs
import cgi
import Cookie
import os
import cgitb
#cgitb.enable(display=0, logdir="/data/6dFGS/tmp/logs")

simbadurl="http://simbad.u-strasbg.fr/simbad/sim-coo?output.format=ASCII&Radius=0.1&Radius.unit=arcmin&"

print "Content-Type: text/html"     # HTML is following
print                               # blank line, end of headers

a_cookie = Cookie.SmartCookie( os.environ.get("HTTP_COOKIE", "") )


# Assign the variable a cookie value.

cookie_val = a_cookie["user"].value


print cookie_val, "user cookie read from client.\n"




form = cgi.FieldStorage()
if not (form.has_key("targetname")):
	print "<H1>Error</H1>"
	print "Please supply a targetname."
	exit;


targetname=form["targetname"].value.strip()
#print "targetname",targetname
commit="0"
ext=1
band="2"
size=1
ra=-999.0
dec=-999.0
circle="1"
hour=targetname[1:3]
min=targetname[3:5]
sec=targetname[5:7]
tenths=targetname[7:8]
sign=targetname[8:9]
degs=targetname[9:11]
dmin=targetname[11:13]
dsec=targetname[13:15]
try:
	ra=15*(float(hour)+float(min)/60+(float(sec)+float(tenths)/10)/3600)
	dec=float(degs)+float(dmin)/60+float(dsec)/3600
except ValueError:
	print "error parsing targetgname into coords should be of format g1234567-012345"
if (sign == "-"):
	dec=dec*-1
#print "<p>",hour,min,sec
#print "<p>",ra
#print "<p>",dec
if (form.has_key("commit")):
	commit="1"
if (form.has_key("circle")):
	circle=form["circle"].value
if (form.has_key("band")):
	band=form["band"].value
if (form.has_key("ext")):
	ext=form["ext"].value
	ext=int(ext)
if (form.has_key("size")):
	size=int(form["size"].value)

if (form.has_key("ra")):
	ra=form["ra"].value
	ra=float(ra)
if (form.has_key("dec")):
	dec=form["dec"].value
	dec=float(dec)
if (band == "1") :
	ext=0
if (band == "2") :
	ext=1
if (band == "7") :
	ext=2
if (band == "8") :
	ext=3
if (band == "9") :
	ext=4

basefile="/data/6dFGS/dr3_fits/"
basejpeg="/data/6dFGS/jpeg/"
fitsfile=basefile+"fits/"+hour+"/"+targetname+".fits"
sssurl="http://www-wfau.roe.ac.uk/sss/cgi-bin/sss_topcat_pix.cgi?"
if ((size==3 or size==5) and (band=="1" or band=="2")):
        fitsfile=basefile+"class/"+hour+"/"+targetname+"_"+band+"_"+str(size)+".fits.gz"
	sssurl=sssurl+"x="+str(size)+"&y="+str(size)+"&ra="+str(ra)+"&dec="+str(dec)+"&waveband="+band
        ext=0
	#print sssurl,fitsfile
	if not os.path.exists(fitsfile):
		req = urllib2.Request(sssurl)
	# Open the url
		try:
			f =  urllib2.urlopen(req)
			#print "downloading " + sssurl

			# Open our local file for writing
			local_file = open(fitsfile, mode='wb')
			#Write to our local file
			local_file.write(f.read())
			local_file.close()
		except urllib2.HTTPError, e:
			print "HTTP Error:",e.code , sssurl
		except urllib2.URLError, e:
			print "URL Error:",e.reason , sssurl



simbadurl=simbadurl+"Coord="+str(ra)+"%20"+str(dec)
#print simbadurl



MAXDIM=105




if not os.path.exists(fitsfile):
	print "Content-Type: text/html"     # HTML is following
	print                               # blank line, end of headers
	print "<H1>Error</H1>"
	print "FITS file does not exist."
	exit;
#print "<p>fitsfile",fitsfile,ext
hdulist = pyfits.open(fitsfile)

xsize, ysize = hdulist[ext].data.shape
data = hdulist[ext].data
hdulist.close()


maxv = str(data.max())
minv = str(data.min())
if (form.has_key("minv")):
	minv=form["minv"].value
if (form.has_key("maxv")):
	maxv=form["maxv"].value

actionurl="http://www-wfau.roe.ac.uk/6dFGS/cgi-bin/newShow.py?release=dr3&targetname="+targetname+"&ra="+str(ra)+"&dec="+str(dec)
print "<table border=\"1\"><tr>"
print "<td colspan=\"2\">Static images</td>"
print "<td align=center valign=center rowspan=\"4\">"
print "<table><tr><td align=\"center\"  width=\"451\" height=\"451\">"
print "<img src=\"http://horus.roe.ac.uk/wsa/cgi-bin/fits2gif.py?targetname="+targetname+"&filename="+fitsfile+"&ext="+str(ext)+ \
"&ra="+str(ra)+"&dec="+str(dec)+"&minv="+minv+"&maxv="+maxv+"&circle="+circle+"\"</img>"
print "</td><tr><td>"
print "<br><form action="+actionurl+" method=POST>"
print "Scale &nbsp; minV: <input type=text name=minv size=7 value=\""+str(minv)+"\"></input>" 
print "&nbsp; maxV: <input type=text name=maxv size=7 value=\""+str(maxv)+"\"></input>"
print "<br>Waveband: &nbsp; B:<input type=\"radio\" name=\"band\" value=\"1\""
if (band == "1"):
	print " checked"
print " >"
print "&nbsp; R:<input type=\"radio\" name=\"band\" value=\"2\""
if (band == "2"):
	print " checked"
print " > "
print "<br>Mark fibre: &nbsp; yes:<input type=\"radio\" name=\"circle\" value=\"1\""
if (circle == "1"):
	print " checked"
print " >"
print "&nbsp; no:<input type=\"radio\" name=\"circle\" value=\"0\""
if (circle == "0"):
	print " checked"
print " > "


print "<br>Size (arcmin) 1:<input type=\"radio\" name=\"size\" value=\"1\""
if (size == 1):
	print " checked"
print " >"
print "&nbsp; 3:<input type=\"radio\" name=\"size\" value=\"3\""
if (size == 3):
	print " checked"
print " >"
print "&nbsp; 5:<input type=\"radio\" name=\"size\" value=\"5\""
if (size == 5):
	print " checked"
print " >"
print "<input type=submit value=\"redraw\"> "
print "</form>"
print "</td></table>"
print "</td><tr>"




L2=["B","R","J","H","K","C"]
arcsize=0
for wb in L2:
    #    print "<td height=\""+str(MAXDIM)+"\" width=\""+str(MAXDIM)+"\">"
	print "<td>" 
        jpegFile=basejpeg+wb+"/"+hour+"/"+targetname+wb+".jpg"
	#print "<br>",jpegFile
	if os.path.exists(jpegFile):
	#	print "<br>",jpegFile
		try:
            		img=Image.open(jpegFile)
        	except IOError:
            		print "cannot open jpeg", 
		if (wb != "C"):
			xsize, ysize = img.size
		width=xsize
		height=ysize
		if (xsize > MAXDIM):
			width=MAXDIM
		if (ysize > MAXDIM):
			height=MAXDIM
                print "<img width=\""+str(width)+"\" height=\""+str(height)+"\" src=\""+jpegFile+"\"></img>"
  		if (wb != "C"):
	                arcsize=int(xsize/2)
                if (wb == "B" or wb =="R"):
			arcsize=60
                
		print "<br>",wb,arcsize,"arcsec"
	else:   
		if (wb == "B" or wb == "R"):
			print "<img width=\"105\" height=\"105\" src=\""+basejpeg+"SSS_"+wb+".gif\"</img>"
		else:
			print "<img width=\"105\" height=\"105\" src=\""+basejpeg+"2MASS_"+wb+".gif\"</img>"
	print "</td>"
        if (wb == "R" or wb=="H"):
		print "<tr>"
print "<tr><td colspan=\"3\">Record classifcation for "+targetname
actionurl=actionurl+"&filename="+fitsfile+"&ext="+str(ext)+ \
"&minv="+minv+"&maxv="+maxv+"&circle="+circle+"&band="+band+"&size="+str(size)
print "<form action="+actionurl+" method=POST>"
print "<input type=submit name=\"commit\" value=\"commit\"> "
print "</form>"
print commit
print "</td>"
print "</table>" 
req = urllib2.Request(url=simbadurl,data='This data is passed to stdin of the CGI')
f = urllib2.urlopen(req)
print "<pre>"
print f.read()
print "</pre>"
		
if not os.path.exists(fitsfile):
	print "Content-Type: text/html"     # HTML is following
	print                               # blank line, end of headers
	print "<H1>Error</H1>"
	print "FITS file does not exist."
	exit;

#hdulist = pyfits.open(fitsfile)

       
#print "<p>fitsfile",fitsfile
#xsize, ysize = hdulist[ext].data.shape
#data = hdulist[ext].data
#hdulist.close()
#print data
#rgbArray = numpy.zeros((ysize,xsize,1), numpy.uint8)
#rgbArray = numpy.zeros((ysize,xsize), numpy.uint8)

#maxv = data.max()
#minv= data.min()
#print maxv
#print xsize, ysize
#print data

#rgbArray[:,:,0]=data.astype(int)*255/(maxv-minv)
#rgbArray[:,:]=data.astype(int)*255/(maxv-minv)*-1+255

#rgbArray[:,:,1]=rgbArray[:,:,0]
#rgbArray[:,:,2]=rgbArray[:,:,0]
#print rgbArray.max()

#img = Image.fromarray(rgbArray[:,:,0],"L")
#img = Image.fromarray(rgbArray,"L").transpose(
#            Image.FLIP_TOP_BOTTOM)

#proj3 = wcs.Projection(hdulist[ext].header)
#coords=(ra,dec)
#pixel=proj3.topixel(coords) 
#draw = ImageDraw.Draw(img)
#xx=int(pixel[0])
#yy=int(pixel[1])
#yy=ysize-yy
#bb=(xx-5,yy-5,xx+5,yy+5)
#draw.ellipse(bb,outline=255)


#print rgbArray[:,:,0]
#print rgbArray



#print rgbArray[:,:,0]
#f = cStringIO.StringIO()
#img.save(f, "GIF")

#print "Content-type: image/gif\n"
#f.seek(0)
#print f.read()
