# -*- mode: python; tab-width:8; py-indent-offset:4; indent-tabs-mode:nil -*-

import datetime
import time

import ridedb

class view(object):

    def __init__(self, db, viewname):
        self.db = db
        self.clubinfo = {}
        clubs = self.db.get_clubs()
        for clubid, fullname, url, favicon in clubs:
            self.clubinfo[clubid] = (fullname, url, favicon)

        title, club_ids, start, end = self.db.get_viewinfo(viewname)
        self.title = title
        self.club_ids = club_ids
        self.start = datetime.datetime(*time.strptime(start, "%Y-%m-%d")[:3])
        self.end = datetime.datetime(*time.strptime(end, "%Y-%m-%d")[:3])


    def title_nbsp(self):
        return self.title.replace(" ", "&nbsp;")


    def clubheaders(self):
        ret = []
        for clubid in self.club_ids:
            fullname, url, favicon = self.clubinfo[clubid]
            if fullname == None: fullname = ""
            if url == None: url = ""
            ret.append((fullname, url, "", favicon))

        return ret

    
    # view defines an iterator that iterates over the weeks to be displayed;
    def __iter__(self):
        self.iter_current_date = None
        return self

    def next(self):
        if self.iter_current_date == None:
            self.iter_current_date = self.start
        else:
            self.iter_current_date += datetime.timedelta(days=7)

        if self.iter_current_date > self.end:
            raise StopIteration
    
        return self

    def week_string(self):
        return self.iter_current_date.strftime("%b %d")

    def is_future(self):
        return self.iter_current_date > datetime.datetime.today()

    def rides(self, date=None):
        if date == None: date = self.iter_current_date
        rides = self.db.get_rides(date)
        ride_dict = {}
        for clubid, name, notes, url in rides:
            ridelist = ride_dict.get(clubid, [])
            ridelist.append((name, notes, url))
            ride_dict[clubid] = ridelist

        rides = [ride_dict.get(clubid, []) for clubid in self.club_ids]
        return rides

    def ride_class(self, ridename):
        ridestart = ridename[:4]
        if ridestart in ("200k", "300k", "400k", "600k"):
            return ' class="b%s"' % ridestart

        return ""

def main():

    def show_rides(date):
        rides = ridedb.get_rides(date)
        print len(rides), "RIDES on date", date
        for r in rides:
             print r
         
    db = ridedb.db("rides.sqlite")
    v = view(db, "main")
    for club_tup in  v.clubheaders():
        print club_tup
    print "START DATE:", v.start
    print "END DATE:", v.end

    print v.rides(datetime.datetime(2009, 1, 3))
    print v.rides(datetime.datetime(2009, 1, 24))
    print v.rides(datetime.datetime(2009, 3, 7))


if __name__ == "__main__":
    main()
