#!/usr/bin/env python
# Copyright (C) 2014 Jurriaan Bremer.
# This file is part of VMCloak - http://www.vmcloak.org/.
# See the file 'docs/LICENSE.txt' for copying permission.

import argparse
import os
import tempfile

from vmcloak.deps import DependencyManager, DependencyWriter


def list_deps(dm):
    print '%-16s: %s' % ('dependency', 'description')
    print '-----------------------------'
    print
    for dep, info in sorted(dm.repo.items()):
        print '%-16s: %s' % (dep, info['description'])


def write_batch_file(dm, args):
    dw = DependencyWriter(dm, tempfile.gettempdir())

    for arg in args:
        dw.add(arg)

    dw.write()

    batch_path = os.path.join(tempfile.gettempdir(), 'deps.bat')
    print open(batch_path, 'rb').read()


actions = {
    'init': lambda dm: dm.init(),
    'update': lambda dm: dm.update(),
    'fetch': lambda dm, arg: dm.fetch(arg),
    'add': lambda dm: None,
    'list-deps': lambda dm: list_deps(dm),
    'write-batch': lambda dm, *args: write_batch_file(dm, args),
}

action_args = {
    'fetch': 'dependency',
    'write-batch': 'dependencies',
}


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('action', type=str, choices=actions.keys(), help='Action to perform.')
    parser.add_argument('arguments', type=str, nargs='*', help='Arguments.')
    parser.add_argument('--deps-directory', type=str, help='Dependency directory.')
    parser.add_argument('--deps-repository', type=str, help='Dependency repository.')

    args = parser.parse_args()

    if args.action in action_args and not args.arguments:
        print '[-] Action %r requires one or more arguments: %r.' % (
            args.action, action_args[args.action])
        exit(1)

    if args.deps_directory:
        deps_directory = args.deps_directory
    else:
        deps_directory = os.path.join(os.getenv('HOME'), '.vmcloak', 'deps')

    if args.deps_repository:
        deps_repository = args.deps_repository
    else:
        deps_repository = \
            'https://raw.githubusercontent.com/jbremer/vmcloak-deps/master/'

    dm = DependencyManager(deps_directory, deps_repository)

    actions[args.action](dm, *args.arguments)

if __name__ == '__main__':
    main()
