#!/usr/bin/env python3
import argparse
import os
from os import path
import shutil
import sys

import nib
from nib.config import default_config

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Get more information at http://github.com/jreese/nib')
    subparsers = parser.add_subparsers(title='actions',
                                       dest='action')

    parser.add_argument('-V', '--version',
                        action='version',
                        version='%(prog)s ' + nib.version)
    parser.add_argument('-d', '--debug',
                        dest='debug',
                        action='store_true',
                        default=False,
                        help='debug output')
    parser.add_argument('-c', '--config',
                        dest='config',
                        metavar='FILE',
                        action='store',
                        default='config.nib',
                        help='site configuration file (default is config.nib)')

    build = subparsers.add_parser('build',
                                  help='generate site output (default action)')

    config = subparsers.add_parser('config',
                                   help='generate new site configuration')
    config.add_argument('-f', '--force',
                        dest='force',
                        action='store_true',
                        default=False,
                        help='overwrite existing configuration files')

    help = subparsers.add_parser('help',
                                 help='show help message for a given command')
    help.add_argument('command',
                      nargs='?')


    options = parser.parse_args()

    try:
        if options.action == 'build' or options.action is None:
            nib.Build(nib.Config(options.config)).run()
            print('Done')

        elif options.action == 'config':
            if path.exists(options.config):
                if not options.force:
                    sys.stderr.write('Warning: "{}" already exists, use --force to overwrite\n'.format(options.config))
                    sys.exit(1)

                os.unlink(options.config)

            shutil.copyfile(default_config, options.config)
            print('Done')

        elif options.action == 'help':
            if options.command is None:
                parser.print_help()
                sys.exit(0)

            for command in subparsers.choices:
                if command == options.command:
                    subparsers.choices[command].print_help()
                    sys.exit(0)

            sys.stderr.write('No help available for command "{}"\n'.format(options.command))
            sys.exit(1)

    except Exception as e:
        if (options.debug):
            raise

        sys.stderr.write('Error: {}\n'.format(e))
        sys.exit(1)
