#!/www/python/bin/python
"""$URL: svn+ssh://svn.mems-exchange.org/repos/trunk/toboso/bin/create_db $
$Id: create_db 23217 2003-11-21 21:05:53Z dbinger $

Create an initial database.
"""

import os
os.environ['SITE'] = 'toboso'
from mx.DateTime import TimeDelta, now, DateTimeType
from mx.DateTime.ISO import Week

from dulcinea.address import Address
from dulcinea.calendar import Reservation, Resource
from dulcinea.user import Contact as User
from toboso.base import open_database, close_database

def init_database(db):
    for name, modname, klassname in [
        ('user_db', 'dulcinea.user_database', 'ContactDatabase'),
        ('resources', 'dulcinea.calendar', 'Resources'),
        ('calendar','dulcinea.calendar', 'Calendar'),
        ('session_manager', 'dulcinea.persistent_session',
         'DulcineaSessionManager'),
        ]:
        db.init_root(name, modname, klassname)

def add_test_data(db):
    for (user_id, name, phone, email) in [
        ("boss", "Big Boss", "555-1212", "boss@example.org"),
        ("don", "Don Jones", "333-6515", "don@example.org"),
        ("jane", "Jane Smith", "123-4567", "jane@example.org"),
        ("spot", "Spot the Dog", None, "spot@example.org")]:
        user = User(user_id)
        user.set_password(user_id)
        address = Address()
        user.set_address(address)
        user.get_address().set_contact_name(name)
        user.get_address().set_contact_phone_number(phone)
        user.set_email(email)
        db.user_db.add_user(user)

    boss = db.user_db['boss']
    db.user_db.get_admin().set_permission('manage-permissions', boss)
    db.user_db.get_admin().set_permission('staff', boss)

    for resource_name, controllers in [
        ("Room 1", ['boss', 'jane']),
        ("Room 2", ['spot']),
        ("Projector", []),
        ]:
        resource = Resource()
        resource.set_title(resource_name)
        resource.set_description(resource_name)
        for controller in controllers:
            resource.set_permission('control', db.user_db[controller])
        db.resources.add(resource)

    for user in ['boss', 'jane', 'spot', 'don']:
        resource.set_permission('reserve', db.user_db[controller])
    date = Week(*now().iso_week)
    for (day, hour, min, duration, resource, user) in [
        (date,     9,  0,  90, 1, 'don'),
        (date,    10, 30,  30, 2, 'jane'),
        (date,    10,  0, 120, 2, 'don'),
        (date+2,  9, 30, 150, 1, 'jane')]:
        block = Reservation()
        start = day + TimeDelta(hours=hour, minutes=min)
        assert type(start) == DateTimeType
        block.set_start_time(start)
        block.set_end_time(start + TimeDelta(minutes=duration))
        block.set_reserved([db.resources.get(resource)])
        block.set_users([db.user_db[user]])
        block.set_title('')
        block.set_description('')
        db.calendar.add(block)

if __name__ == "__main__":
    db = open_database("file:/www/var/toboso.fs")
    init_database(db)
    add_test_data(db)
    get_transaction().commit()
