# -*- coding: utf-8 -*-
"""Setup the floof application"""
import logging

from floof.config.environment import load_environment

log = logging.getLogger(__name__)

from pylons import config
from elixir import *
from floof import model as model

import os

def setup_app(command, conf, vars):
    """Place any commands to setup floof here"""
    load_environment(conf.global_conf, conf.local_conf)

    # We try to recreate the db when it already exists, like, a lot.  This
    # fucks everything.  Do a dumb check for it.
    assert not model.User.table.exists(), \
           "Database is already initialized; please purge it first."

    ### Database schema
    model.metadata.create_all()

    ### Sample data
    # Users
    identity_url = model.IdentityURL(url=u'http://eevee.livejournal.com/')
    user = model.User(name=u'eevee', display_name=u'Eevee')
    user.identity_urls.append(identity_url)

    model.Session.commit()

    ### Filesystem stuff
    # Only necessary if we're using the filesystem for storage.
    # And we are!
    art_path = os.path.join(config['app_conf']['static_root'], 'art')
    # Test that we can write to the art directory
    if os.access(art_path, os.W_OK | os.X_OK):
        # Create directories for various image sizes
        for subdir in ['original', 'medium', 'thumbnail']:
            path = os.path.join(art_path, subdir)
            # If it exists, it should be writeable.  If not, create it.
            if os.path.exists(path):
                if not os.access(path, os.W_OK | os.X_OK):
                    print "*** WARNING: Can't write to the art/{0} " \
                          "directory!".format(subdir)
                continue
            os.makedirs(path)
    else:
        print "*** WARNING: Can't write to the art directory!"
