#!/usr/bin/env python

import sys
import stat
import subprocess
import os

subcommand = sys.argv[1]

if subcommand == 'suggest':
    sys.path.append(os.getcwd())
    from giotto import initialize
    import config
    initialize(config)
    from manifest import manifest
    if len(sys.argv) > 2:
        item = sys.argv[2]
    else:
        item = ''
    suggestions = manifest.get_suggestion(item)
    print " ".join(suggestions)
    raise SystemExit()

if subcommand == 'create':
    controllers = sys.argv[2:]
    config_template = '''import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from giotto.utils import better_base

Base = better_base()

from sqlite3 import dbapi2 as sqlite
engine = create_engine('sqlite+pysqlite:///file.db', module=sqlite)

session = sessionmaker(bind=engine)()
cache = None
auth_session = None

project_path = os.path.dirname(os.path.abspath(__file__))

from jinja2 import Environment, FileSystemLoader
jinja2_env = Environment(loader=FileSystemLoader(project_path))

debug = True
error_template = None'''

    template_controller = '''\
#!/usr/bin/env python
# coding: utf-8

import argparse
import sys
from giotto import initialize

import config
initialize(config)

from manifest import manifest
'''

    blank_application = '''from giotto.programs import GiottoProgram, ProgramManifest
from giotto.programs.management import management_manifest
from giotto.views import BasicView

manifest = ProgramManifest({
    '': GiottoProgram(
        model=[lambda: "Welcome to Giotto!"],
        view=BasicView
    ),
    'mgt': management_manifest,
})'''

    from giotto.demo import demo_application

    try:
        open('manifest.py', 'r')
    except IOError:
        # create a blank manifest file (if one doesn't already exist)
        f = open('manifest.py', 'w')
        if '--demo' in controllers:
            f.write(demo_application)
        else:
            f.write(blank_application)

    try:
        open('config.py', 'r')
    except IOError:
        # create a blank config file (if one doesn't already exist)
        f = open('config.py', 'w')
        f.write(config_template)

    for controller in controllers:
        if controller == 'http':
            from giotto.controllers.http import http_execution_snippet
            filename = 'http_controller.py'
            f = open(filename, 'w')
            st = os.stat(filename)
            f.write(template_controller + http_execution_snippet)
            os.chmod(filename, st.st_mode | stat.S_IEXEC)

        if controller == 'irc':
            from giotto.controllers.irc_ import irc_execution_snippet
            filename = 'irc_controller.py'
            f = open(filename, 'w')
            f.write(template_controller + irc_execution_snippet)
            st = os.stat(filename)
            os.chmod(filename, st.st_mode | stat.S_IEXEC)

        if controller == 'cmd':
            from giotto.controllers.cmd import cmd_execution_snippet
            filename = 'cmd_controller.py'
            f = open(filename, 'w')
            f.write(template_controller + cmd_execution_snippet)
            st = os.stat(filename)
            os.chmod(filename, st.st_mode | stat.S_IEXEC)

    raise SystemExit()

command = ["python"] + ["%s_controller.py" % subcommand] + sys.argv[2:]
process = subprocess.Popen(command)
try:
    process.wait()
except KeyboardInterrupt:
    pass




