"""
Import a timestable init file
Format:

name
title
yyyy/mm/dd
allow_null
show_parents, room
show_parents, room
show_parents, room

name
title
yyyy/mm/dd
allow_null
show_parents, room
show_parents, room
show_parents, room

"""
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
from datetime import date
import re

datere = re.compile("^(?P<year>20\d{2})/(?P<month>0?[1-9]|10|11|12)/(?P<day>0?[1-9]|1[0-9]|2[0-9]|3[0-2])$")

def iter_rooms(it):
    for l in it:
        if not len(l.strip()): return
        par, room = l.strip().split(',')
        yield bool(par.strip()), room.strip()

def iter_tables(f):
    fiter=iter(f)
    for name in fiter:
        title = fiter.next().strip()
        ymd = date(*[int(x, 10) for x in fiter.next().strip().split('/')])
        anull = bool(fiter.next().strip())
        yield name.strip(), title, ymd, anull, iter_rooms(fiter)

class Command(BaseCommand):
    args = '<filename>'

    @transaction.commit_on_success
    def handle(self, *args, **options):
        from django.db import models
        from pycon.core import safe_ascii_encode
        if len(args) != 1:
            raise CommandError('Enter a valid input file.')
        try:
            models = models.get_app('schedule')
        except (ImproperlyConfigured, ImportError), e:
            raise CommandError(
                "%s. Are you sure your INSTALLED_APPS setting is correct?" % e)

        def mkcol(tt, par, name):
            room = models.Room.objects.get(name=name)
            col = models.TimeTableColumn(time_table=tt, include_parents=par,
                                         room=room)
            col.save()
            return col

        for name, title, day, anull, rooms in iter_tables(file(args[0],'rU')):
            tt = models.TimeTable()
            tt.name=name
            tt.title=title
            tt.date=day
            tt.nullroom=anull
            tt.save()
            print '--------------------'
            print tt.title
            for par, name in rooms:
                room = models.Room.objects.get(name=name)
                col = models.TimeTableColumn(time_table=tt, include_parents=par,
                                             room=room)
                col.save()
                print '   ', col.room
