#!/usr/bin/env python

from __future__ import with_statement

from fabric.api import env
import os

from chef_solo_cup import helpers
from chef_solo_cup.log import setup_custom_logger
from chef_solo_cup.parse_args import parse_args
from chef_solo_cup.version import version
from chef_solo_cup.commands.bootstrap import bootstrap
from chef_solo_cup.commands.clean import clean
from chef_solo_cup.commands.default import default
from chef_solo_cup.commands.gem import gem
from chef_solo_cup.commands.ruby import ruby
from chef_solo_cup.commands.runner import run_command, sudo_command
from chef_solo_cup.commands.sync import sync
from chef_solo_cup.commands.test import test
from chef_solo_cup.commands.update import update

AWS_KEY = os.environ.get('AWS_KEY', None)
AWS_SECRET_KEY = os.environ.get('AWS_SECRET_KEY', None)


args = parse_args()
version(args)

logger = setup_custom_logger('chef-solo-cup', args)
hosts = helpers.get_hosts(args, logger=logger)

commands = {
    'default': default,
    'clean': clean,
    'gem': gem,
    'ruby': ruby,
    'run': run_command,
    'sudo': sudo_command,
    'sync': sync,
    'test': test,
    'update': update,
}


logger.info("Matched hosts: " + str(hosts.keys()))
for host, config in hosts.iteritems():
    logger.info("Running {0} against {1}".format(args.command, host))

    env.use_ssh_config = True
    env.user = args.user
    env.host = host
    env.host_string = host

    if args.key_filename:
        env.key_filename = [args.key_filename, ]

    if args.command == 'bootstrap':
        env.abort_on_prompts = True
        bootstrap(args, config, logger=logger)
        update(args, config, logger=logger)
    elif args.command in commands:
        commands[args.command](args, config, logger=logger)
