#!/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 numpy
from kapteyn import wcs
import cgi

import cgitb
#cgitb.enable(display=0, logdir="/data/6dFGS/tmp/logs")


form = cgi.FieldStorage()
if not (form.has_key("targetname") and form.has_key("filename")  ):
	print "Content-Type: text/html"     # HTML is following
	print                               # blank line, end of headers
	print "<H1>Error</H1>"
	print "Please supply a filename or targetname."
	exit;


targetname=form["targetname"].value.strip()
#print "targetname",targetname
ext=1
band=""
circle="1"
ra=-999.0
dec=-999.0
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("ra")):
	ra=form["ra"].value
	ra=float(ra)
if (form.has_key("dec")):
	dec=form["dec"].value
	dec=float(dec)
if (band == "R") :
	ext=1

basefile="/data/6dFGS/dr3_fits/fits/"
hour=targetname[1:3]
fitsfile=basefile+hour+"/"+targetname+".fits"
if (form.has_key("filename")):
	fitsfile=form["filename"].value.strip()
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,3), numpy.uint8)
#rgbArray = numpy.zeros((ysize,xsize), numpy.uint8)

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


#print maxv
#print xsize, ysize
#print data

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

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




rgbArray[:,:,0]=numpy.minimum(255,rgbArray[:,:,0])
#rgbArray[:,:]=numpy.minimum(255,rgbArray[:,:])



rgbArray[:,:,1]=rgbArray[:,:,0]
rgbArray[:,:,2]=rgbArray[:,:,0]

#print rgbArray.max()

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

img = Image.fromarray(rgbArray,"RGB").transpose(
            Image.FLIP_TOP_BOTTOM)
#.resize((xsize*2,ysize*2))

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)
#if (circle == "1"):
#	draw.ellipse(bb,outline=255)

#print "Content-Type: text/html"     # HTML is following
#print                               # blank line, end of headers
#print rgbArray[0:10,0:1,0]
#print rgbArray[1,1,1]
#print rgbArray[1,1,2]
#print rgbArray[2,1,0]
#print rgbArray[2,1,1]
#print rgbArray[2,1,2]
#print rgbArray[3,1,0]
#print rgbArray[3,1,1]
#print rgbArray[3,1,2]
#print rgbArray



#print rgbArray[:,:,0]
f = cStringIO.StringIO()
#f="/data/wsa/tmp/tmp.gif"
bigsize=447.0
maxdim=max(img.size[0],img.size[1])
factor=bigsize/float(maxdim)
newsize=int(factor)*100

linelength=int(factor*20/0.6714)





#Image.ANTIALIAS
img=img.resize((int(img.size[0]*factor),int(img.size[1]*factor)),Image.BICUBIC)

yy=(bigsize-factor*yy)
xx=(xx*factor)
bb=(int(xx-5*factor),int(yy-5*factor),int(xx+5*factor),int(yy+factor*5))
draw = ImageDraw.Draw(img)
if (circle == "1"):
	draw.ellipse(bb,outline=255)
        draw.line((5,img.size[1]-10,5+linelength,img.size[1]-10),fill=255)
        draw.line((5,img.size[1]-7,5,img.size[1]-13),fill=255)
	draw.line((5+linelength,img.size[1]-7,5+linelength,img.size[1]-13),fill=255)

img.save(f, "PNG",quality=100)

#,quality=100)
#img.save(f, "GIF")

print "Content-type: image/png\n"
f.seek(0)
print f.read()
#print "Content-type: text/html\n\n"
#print bb,factor,maxdim