from base import *
from srsbrowser.models import REF_TYPE_CHOICES 

def search_term(text, ref_class):
    ref_list = ref_class.objects.all()
    for term in text.split(" "):
        if ref_class == SpatialRefAttribute:
            ref_list = ref_list.filter(srid_srtext__icontains=term)
        elif ref_class == SpatialRefAttribute:
            ref_list = ref_list.filter(wkt__icontains=term)
        #else:     
        #    list = list.filter(title__icontains=term)
    return ref_list    
def count_results(request, ref_class):
    search = {}
    if request.GET.has_key('search'):
        search['search'] = request.GET['search'] 
    ref_list = search_term(request.GET['search'], ref_class)            
    if not ref_list.count():
        ref_list = search_term(text.replace("_", " "), ref_class)
    return {'count':ref_list.count(),'search_link':urllib.urlencode(search)}
    

# gets called from list.py
def code_listing(request, type=None, order="srs_id"):
    per_page, start, page = 50,0,0
    prev_page = next_page = exact = None
    
    ref_list = SRS.objects.all()
    if type:
        ref_list = ref_list.filter(type=type)
    
    search = {}
    search_text = ''
    
    if request.GET.has_key('search'):
        new_ref_list = ref_list
        search['search'] = request.GET['search'].encode("utf-8")
        search_text = search['search']
        
        if search_text.isdigit():
             exact = SRS.objects.filter(srs_id=search_text)
        
        for term in search['search'].split(" "):
            new_ref_list = new_ref_list.filter(title__icontains=term) | new_ref_list.filter(description__icontains=term) | new_ref_list.filter(wkt__icontains=term)
        if new_ref_list.count() == 0:
            new_ref_list = ref_list
            for term in search['search'].split("_"):
                new_ref_list = new_ref_list.filter(title__icontains=term) | new_ref_list.filter(description__icontains=term) | new_ref_list.filter(wkt__icontains=term)
        ref_list = new_ref_list    
        
    if request.GET.has_key("bbox"):
        search['bbox'] = request.GET['bbox']
        box = request.GET['bbox'].split(",")
        boxgeom = "POLYGON(( %s %s, %s %s, %s %s, %s %s, %s %s))" % (
          box[0], box[1], box[2], box[1], 
          box[2], box[3], box[0], box[3], 
          box[0], box[1])
        ref_list = ref_list.filter(bounds__bboverlaps=boxgeom) 

    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 
    
    ref_list = ref_list.order_by(order)[start:start + per_page]
    
    if page > 0:
        prev_page = page 
    if len(ref_list) == per_page:
        next_page = page + 2

    template_data = {'list':ref_list,'prev_page':prev_page, 'next_page': next_page, 'link_str':search_string, 'search_text': search_text, 'exact':exact }
    types = dict(REF_TYPE_CHOICES)
    if type in types:
        template_data['type'] = types[type]
    return template_data    
