#!/bin/env python
import argparse
import denim


class EnvironmentAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        environments = getattr(namespace, self.dest)
        environments = {} if environments is None else environments
        env, _, hosts = values.partition(':')
        hosts = hosts.split(',') if hosts else []
        environments[env] = hosts
        setattr(namespace, self.dest, environments)


def parse_options():
    parser = argparse.ArgumentParser(description=
"""
Tools and scaffolding for Denim  %s
""" % denim.__version__)
    parser.add_argument('-v', '--verbose', action='store_true',
        help="enables verbose output.")
    parser.add_argument('--version', action='store_true',
        help="display version and exit.")
    subparsers = parser.add_subparsers()

    ## Start Project.
    parser_start_project = subparsers.add_parser('startproject',
        help="Start a project using Denim"
    )
    parser_start_project.add_argument('project_name', action='store',
        help="Name of the project to create."
    )
    parser_start_project.add_argument('package_name', action='store',
        help="Name of the application package."
    )

    parser_start_project.add_argument('-n', '--hostname', action='store',
        default='www.example.com',
        help="Hostname to use as base."
    )
    parser_start_project.add_argument('-e', '--env', action=EnvironmentAction,
        help="Command delimited list of deployment environments (override defaults)"
    )
    parser_start_project.add_argument('-x', '--extra_env', action=EnvironmentAction,
        help="Command delimited list of deployment environments (add to defaults)"
    )

    parser_start_project.add_argument('-t', '--template', action='store',
        default='django',
        choices=('django',),
        help="Type of project"
    )
    parser_start_project.add_argument('--scm', action='store',
        default='hg',
        choices=('git', 'hg',),
        help="Source control to use."
    )
    parser_start_project.add_argument('--service', action='store',
        default='supervisor',
        choices=('supervisor',),
        help="Service manager to use."
    )
    parser_start_project.add_argument('--webserver', action='store',
        default='nginx',
        choices=('apache', 'nginx',),
        help="Web server to use."
    )

    # Add scaffold options
    parser_scaffold = subparsers.add_parser('scaffold',
        help="Scaffold new configuration or environment"
    )
    parser_scaffold.add_argument('type', action='store',
        choices=('django','nginx','supervisor'),
        help="Type of file to scaffold."
    )
    parser_scaffold.add_argument('environment', action='store',
        default='*',
        help="Name of environment to scaffold; use * for all."
    )

    return parser.parse_args()


def main():
    options = parse_options()

    from denim import scaffold





if __name__ == '__main__':
    main()
