# Create your views here.
from django.utils.httpwrappers import HttpResponse
from django.core.extensions import render_to_response
from django.core.template import Template, loader
from django.core.extensions import DjangoContext as Context
from django.models.mappy import zipcodes, persons

def get_zipcode_latlon(zipcode):
    from urllib2 import urlopen
    datadict = {}
    try:
      u = urlopen('http://geocoder.us/service/csv/geocode?zip=%s'%zipcode)
      data = u.read()
      #lat, lon, city, state, zipcode = data.split(',')
      dataparts = data.split(',')
      if len(dataparts) == 5:
        datadict['lat'] = dataparts[0].strip()
        datadict['lon'] = dataparts[1].strip()
        datadict['city'] = dataparts[2].strip()
        datadict['state'] = dataparts[3].strip()
        datadict['zipcode'] = dataparts[4].strip()
        datadict['code'] = 1
      else:
        datadict['msg'] = data
        datadict['code'] = 0 
      return datadict
      
    except:
      datadict['msg'] = 'Fault looking up zipcode %s'%zipcode
      datadict['code'] = 0 
      return datadict

def add_point(u_zipcode, u_email): # remember zip is a reserved word
    z = zipcodes.get_list(zipcode__exact=u_zipcode)
    if len(z)==0: # not already in db
        lookup = get_zipcode_latlon(u_zipcode)
        if lookup['code'] ==1:
            zippy = zipcodes.Zipcode(zipcode=lookup['zipcode'],lat=lookup['lat'],
            lon=lookup['lon'], city=lookup['city'], state=lookup['state'])
            zippy.save()
        else:
            return "Could not find that zipcode."
    else:
        zippy = z[0]
    em = persons.get_list(email__iexact=u_email)
    if len(em)>0:
        return "Your email address is already in the database."
    else:
        emailaddr = persons.Person(zipcode=zippy, email=u_email)
        emailaddr.save()
    return "Thanks for adding your zipcode to the map."

def build_point_list():
    points = []
    ziplist = zipcodes.get_list(order_by=('id',))
    for z in ziplist:
        point = {}
        point['lat'] = z.lat
        point['lon'] = z.lon
        point['text'] = '%s (%s, %s)'%(z.zipcode, z.city, z.state)
        points.append(point)
    return points

def index(request):
    info = {}
    info['message'] = ''
    if request.POST.has_key('zipcode'):
        info['message'] = add_point(request.POST['zipcode'], request.POST['email'])
       # lookup = get_zipcode_latlon(request.GET['zipcode'])
        #info['message'] = "Your zipcode (%s) is at (%s, %s)"%(lookup['zipcode'],lookup['lat'],lookup['lon'])

    info['points'] = build_point_list()
    info['message'] = info['message'] + ' - ' + ' There are %s zipcodes in the database'%(len(info['points']))
    return  render_to_response("mappy/index", info,
          context_instance=Context(request) )

