#!/usr/bin/python
# -*- encoding: utf-8 -*-

##
## views.py
## Created on Sat Dec 23 00:08:09 2006
## by Antti Kaihola <antti.kaihola@linux-aktivaattori.org>
## 
## Copyright (C) 2006 Antti Kaihola
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##

import re

from django.shortcuts import render_to_response
from django.template import RequestContext
from django import newforms as forms
from django.http import HttpResponseRedirect

from models import TracSite

from tracaccess import import_tickets_csv


def rrr(template, request, **kw):
    return render_to_response(template, kw, RequestContext(request))


class SelectSitesForm(forms.Form):
    sites = forms.MultipleChoiceField(required=False, label=_('Trac sites'))
    owners = forms.CharField(required=False, label=_('Ticket owners'))
    
def index(request):
    sites_form = SelectSitesForm()
    sites_form.fields['sites'].widget.choices = ((site.id, site.name)
                                                 for site in TracSite.objects.all())
    return rrr('tracregator/index.html', request, form=sites_form)


def filter_owners(owners, tickets):
    for ticket in tickets:
        if not owners or 'owner' not in ticket or ticket['owner'] in owners:
            yield ticket

        
def tickets(request, sites_str=None, owners_str=None):
    if request.GET:
        if request.GET.has_key('show_tickets_for_sites'):
            sites = '+'.join(site.name
                             for site in TracSite.objects.filter(pk__in=request.GET.getlist('sites')).order_by('name'))
        else:
            sites = 'all_sites'
        owners = filter(None, re.split(r'\W+', request.GET['owners'])) \
                 or ['all_owners']
        owners.sort()
        return HttpResponseRedirect('./%s/%s/' % (
            sites, '+'.join(owners)))
    
    sites = TracSite.objects.all()
    if sites_str is not None and sites_str != 'all_sites':
        sites = sites.filter(name__in=sites_str.split('+'))

    if owners_str is None or owners_str == 'all_owners':
        owners = None
    else:
        owners = owners_str.split('+')
        
    for site in sites:
        site.tickets = filter_owners(
            owners,
            import_tickets_csv(site.name, site.baseurl, site.report_number, site.username, site.password))

    return rrr('tracregator/tickets.html', request,
               sites=sites,
               owners=owners)


