# Create your views here.

# from django.template import Context, loader
# from django.http import HttpResponse, HttpResponseNotFound, Http404, HttpResponseRedirect
# from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
# from references.models import UserReference, SpatialRefSys, SpatialRefAttribute
# from references.forms import Upload
# from osgeo import osr
# import urllib
# 
# from django.conf import settings
# 
# from recaptcha import captcha
# from graticules import render as gratrender


# fetching toWGS84 stuff
# operations = EpsgCoordoperation.objects.filter(target_crs_code=4326,source_crs_code=4194)
# methods = [a.coord_op_method for a in operations]
# y = EpsgCoordoperationparamvalue.objects.filter(coord_op_code=1797, coord_op_method_code__in=[9603, 9606, 9607])


# def main_page(request):
#     recent_uploads = UserReference.objects.all().order_by('-id')[0:5]
#     recent_views   = SpatialRefAttribute.objects.all().order_by('-last_changed', '-views')[0:5]
#     return render_to_response('references/index.html', {'recent_uploads': recent_uploads, 'recent_views': recent_views})

# def user_upload(request):
#     value = 'Post Your Projection'
#     if request.method == 'POST':
#         check_captcha = captcha.submit( request.POST['recaptcha_challenge_field'], \
#                                         request.POST['recaptcha_response_field'], \
#                                         settings.RECAPTCHA_PRIVATE_KEY, \
#                                         request.META['REMOTE_ADDR'])
#         form = Upload(request.POST)
#         if form.is_valid() and check_captcha.is_valid:
#           form.save()
#           #form.cleaned_data['creator'] = request.user
#           return HttpResponseRedirect('/') 
#     else:
#         form = Upload()
#     return render_to_response('upload.html', {'form': form, 'value': value})    

# def my_post_free_comment(request):
#     if request.POST.has_key('url'):
#         url = request.POST['url']
#     else:
#         url = '/comments/posted.html'
#     response = post_free_comment(request)
#     return HttpResponseRedirect(url)

# def old_url(request, code = None, type = None, id = None, output = None ):
#     response =  render_to_response("references/404.html", 
#       {'title': "Old URL", 
#        "text": "You are using an old URL. You should be using <a href='/ref%s'>/ref%s</a> instead." % (request.path, request.path)
#       })
#     response.status_code = 404
#     return response
# 
# def render(request, code):
#     srs = get_object_or_404(SpatialRefSys, pk=int(code))
#     try:
#         minx = srs.epsg_ref_sys_code.area_of_use_code.area_west_bound_lon 
#         miny = srs.epsg_ref_sys_code.area_of_use_code.area_south_bound_lat 
#         maxx = srs.epsg_ref_sys_code.area_of_use_code.area_east_bound_lon  
#         maxy = srs.epsg_ref_sys_code.area_of_use_code.area_north_bound_lat 
#     except Exception, E:
#         error = {'title': 'Invalid Render Request', 'text': "Can't render that image.", 'exception': E} 
#         response = render_to_response("references/404.html", error)
#         return response
#     
#     b = (minx, miny, maxx, maxy)
#     o = gratrender.render(b, 'http://spatialreference.org/ref/epsg/%s/proj4/'%int(code))
#     data = o.read()
#     response = HttpResponse()
#     response.write(data)
#     response['Content-length'] = str(len(data))
#     response['Content-Type'] = 'image/png'
#     return response

# def response(feature, callback):
#     import simplejson
#     response = HttpResponse()
#     if callback:
#         response.write('%s(%s);' % (callback, simplejson.dumps(feature)))
#     else:
#         response.write('%s'%simplejson.dumps(feature))
#         response['Content-length'] = str(len(response.content))
#         response['Content-Type'] = "application/json"
#         return response

# def user_download(request):
#     list = UserReference.objects.all().order_by('id')
#     response = HttpResponse()
#     output = []
#     for item in list:
#         output.append("# %s" % item.title)
#         output.append("<%s> %s" % (item.id, item.ref.proj4text))
#     response.write('%s' % "\n".join(output))
#     response['Content-length'] = str(len(response.content))
#     response['Content-Type'] = "text/plain" 
#     return response

#             
# def index(request, type, code):
#     if request.META.has_key("HTTP_ACCEPT"):
#         if request.META['HTTP_ACCEPT'] in FORMATS:
#             return epsg(request, type, code, FORMATS[request.META['HTTP_ACCEPT']])
#     try:
#         ref = osr.SpatialReference()
#         ref.ImportFromEPSG(int(code))
#     except RuntimeError, E:
#         error = {'title': 'Invalid Projection', 'text': "OGR Failed to load the requested projection", 'exception': E} 
#         response = render_to_response("references/404.html", error)
#         response.status_code = 404
#         return response
#     srs = SpatialRefAttribute.objects.get(ref=int(code))
#     srs.add_count()
#     next = prev = None
#     try:
#         next = SpatialRefSys.objects.filter(srid__gt=srs.srid()).order_by('srid')[0]
#     except IndexError:
#         pass
#     try:
#         prev = SpatialRefSys.objects.filter(srid__lt=srs.srid()).order_by('-srid')[0]
#     except IndexError:
#         pass
#     type = srs.auth_name()
#    
#     type = type.upper()
#     
#     
#     return render_to_response('references/epsg_index.html', 
#                {'type': type, 
#                 'code': code, 
#                 'openid': request.openid,
#                 'srs':srs,
#                 'next':next,
#                 'prev': prev
#                 })
        
# def user_list(request):
#     if request.method == "POST":    
#         data = request.POST['input']
#         sr = osr.SpatialReference()
#         sr.SetFromUserInput(data)
#         if request.POST.has_key('esriwkt') and request.POST['esriwkt'] == 'yes':
#             sr.MorphFromESRI()
#         wkt = sr.ExportToWkt()
#         ref = UserReference(title=request.POST['title'], proj4text=wkt, views=0,
#                         description = request.POST['description'] )
#         if request.openid:
#             ref.creator = str(request.openid)
#         ref.slug = ref.gen_slug()
#         ref.save()
#         
#         return HttpResponseRedirect('/ref/user/%s/' % ref.id)
#     
#     else:
#         template_data = code_listing(request, UserReference, "-id")
#         template_data['openid'] = request.openid
#         template_data['epsg_results'] = count_results(request, SpatialRefSys)
#         return render_to_response('references/user_list.html', template_data)

# def epsg_list(request):       
#     template_data = code_listing(request, SpatialRefSys, "srid")
#     template_data['user_results'] = count_results(request, UserReference)
#     return render_to_response('references/epsg_list.html', template_data)
# 
# def count_results(request, ref_class):
#     list = ref_class.objects.all()
#     search = {}
#     if request.GET.has_key('search'):
#         search['search'] = request.GET['search'] 
#         for term in request.GET['search'].split(" "):
#             if request.GET.has_key('srtext') or request.GET.has_key('wkt'):
#                 if ref_class == SpatialRefSys:
#                     search['srtext'] = 'true' 
#                     list = list.filter(srtext__icontains=term)
#                 else:
#                     search['wkt'] = 'true'
#                     list = list.filter(wkt__icontains=term)
#             else:     
#                 list = list.filter(title__icontains=term)
#                 
#     return {'count':list.count(),'search_link':urllib.urlencode(search)}
# 
# def code_listing(request, ref_class, order):
#     per_page = 50
#     start = 0
#     page = 0 
#     prev_page = next_page = exact = None
#     
#     
#     list = ref_class.objects.all()
#     
#     search = {}
#     search_text = ''
#     if request.GET.has_key('search'):
#         for term in request.GET['search'].split(" "):
#             if request.GET.has_key('srtext'):
#                 list = list.filter(srtext__icontains=term)
#                 search['srtext'] = 'true'
#             elif request.GET.has_key('wkt'): 
#                 list = list.filter(proj4text__icontains=term)
#                 search['wkt'] = 'true'
#             else:     
#                 list = list.filter(spatialrefattribute__title__icontains=term)
#         search['search'] = request.GET['search']    
#         search_text = request.GET['search']
#         if search_text.isdigit():
#             try:
#                 exact = ref_class.objects.get(pk=search_text)
#             except:
#                 pass
#     search_string = urllib.urlencode(search)    
#     if search_string:
#         search_string = "&%s" % search_string
#     
#     
#     if request.GET.has_key('page'):
#         page = int(request.GET['page']) - 1   
#         start = page * per_page 
#     
#     list = list.order_by(order)[start:start + per_page]
#     
#     if page > 0:
#         prev_page = page 
#     if len(list) == per_page:
#         next_page = page + 2
#     return {'list':list,'prev_page':prev_page, 'next_page': next_page, 'link_str':search_string, 'search_text': search_text, 'exact':exact}
# 
# def user_index(request, code):
#     if code.isdigit():
#         item = get_object_or_404(UserReference, pk=int(code))   
#     else:
#         item = get_object_or_404(UserReference, slug=code)
#     if request.META.has_key("HTTP_ACCEPT"):
#         if request.META['HTTP_ACCEPT'] in FORMATS:
#             return user(request, code, FORMATS[request.META['HTTP_ACCEPT']])
#     item.views += 1
#     item.save()
#     return render_to_response('references/user_index.html', {'item':item, 'openid': request.openid})
# 
# def user(request, code, output):
#     if code.isdigit():
#         item = get_object_or_404(UserReference, pk=int(code))   
#     else:
#         item = get_object_or_404(UserReference, slug=code)
#     try:
#         ref = osr.SpatialReference()
#         ref.SetFromUserInput(item.ref.proj4text)
#     except Exception, E:
#         error = {'title': 'Invalid User Projection', 'text': "OGR Failed to load the requested projection.", 'exception': E} 
#         response = render_to_response("references/404.html", error)
#         response.status_code = 404
#         return response
#     
#     try:    
#         return output_proj(request, ref, output, item.id)
#     except FormatError: 
#         return HttpResponseRedirect('/ref/user/%s/' % code)

# def epsg(request, type, code, output):
#     try:
#         ref = osr.SpatialReference()
#         ref.ImportFromEPSG(int(code))
#     except:
#         error = {'title': 'Invalid Projection', 'text': "OGR Failed to load the requested projection.", 'exception': E} 
#         response = render_to_response("references/404.html", error)
#         response.status_code = 404
#         return response
#     try:    
#         return output_proj(request, ref, output, code)
#     except FormatError: 
#         return HttpResponseRedirect('/ref/%s/%s/' % (type,code))

# def output_proj(request, ref, output, code = None):    
#     ct = "text/plain"
#     if output.upper() =='PROJ4':
#         out = ref.ExportToProj4()
#     elif output.upper() == 'PROJ4JS':
#         out = ref.ExportToProj4()
#         projObj = "Proj4js.defs"
#         if request.GET.has_key('obj'):
#             projObj = request.GET['obj']
#         if code:
#             out = '%s["EPSG:%s"] = "%s";' % (projObj, code, out)
#     elif output.upper() == 'PRETTYWKT':
#         out = ref.ExportToPrettyWkt()
#     elif output.upper() == 'OGCWKT':
#         out = ref.ExportToWkt()
#     elif output.upper() == 'ESRIWKT':
#         ref.MorphToESRI()
#         out = ref.ExportToWkt()
#     elif output.upper() == 'GML':
#         out = ref.ExportToXML()
#     elif output.upper() == 'USGS':
#         out = ref.ExportToUSGS()
#     elif output.upper() == 'MAPFILE':
#         out = 'PROJECTION\n\t'+'\n\t'.join(['"'+l.lstrip('+')+'"' for l in ref.ExportToProj4().split()])+'\nEND' 
#     elif output.upper() == 'POSTGIS':                                              
#         out = 'INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values ( 9%s, \'spatialreference.org\', %s, \'%s\', \'%s\');' % (code, code, ref.ExportToProj4(), ref.ExportToWkt())                                                 
#     elif output.upper() == 'JSON':
#         if ref.IsGeographic():
#             code = ref.GetAuthorityCode("GEOGCS")
#         else:
#             code = ref.GetAuthorityCode("PROJCS")
#         out = {}
#         out['type'] = 'EPSG'
#         out['properties'] = {'code':code}
#         ct = "application/json" 
#     else:
#         raise FormatError("No format found for %s" % output)
#     response = HttpResponse()
#     response.write('%s'%out)
#     response['Content-length'] = str(len(response.content))
#     response['Content-Type'] = ct 
#     return response
