#!/usr/bin/env python
from __future__ import print_function

import sys
import os
import logging
import pprint

from docopt import docopt

from embellish import engine, server, __version__

__doc__ = '''
EMBELLISH %s: a low friction static website generator.

Usage: embellish [options] <target>

Options:
  <target>  1. If target is directory, processes all 
               text files in directory
            2. If target is a .yaml file, reads it as
               a configuration file
            3. Otherwise, this is processed as a text 
               file.
  -m  triggers a local web-server that monitors the
      contents directory 
  -f  force rebuild from scratch 
  -r  searches sub-directories to find content

''' % __version__

logging.basicConfig(level=logging.INFO)

args = docopt(__doc__)

site = engine.default_site
if os.path.isfile(args['<target>']):
  config_dir = os.path.dirname(args['<target>'])
  if args['<target>'].endswith('.yaml'):
    site.update(engine.read_config_yaml(args['<target>']))
    print('>>> Input is a YAML site configuration file')
  else:
    site['files'].append(os.path.basename(args['<target>']))
    print('>>> Input is a file')
elif os.path.isdir(args['<target>']):
  os.chdir(args['<target>'])
  config_dir = args['<target>']
else:
  logging.error('can\'t figure out {0}.'.format(args['<target>']))
  sys.exit(1)

print('>>> Site configuration:')
pprint.pprint(site)

if args['-r']:
  site['recursive'] = args['-r']
if args['-f']:
  site['force'] = args['-f']

engine.generate_site_incrementally(site)

if args['-m']:
  site_dir = os.path.abspath(
      os.path.join(config_dir, site['output_dir']))

  # normalize all paths
  for key in site.keys():
    if key.endswith('_dir') or key.startswith('cache'):
      site[key] = os.path.abspath(os.path.join(config_dir, site[key]))

  regenerate = lambda: engine.generate_site_incrementally(site)

  # get all directories needed to monitor
  embellish_dir = os.path.split(engine.__file__)[0]
  defaults_dir = os.path.join(embellish_dir, 'defaults')
  keys = ['content_dir', 'template_dir', 'media_dir']
  monitor_dirs = [site[key] for key in keys]
  monitor_dirs.append(defaults_dir)

  server.run(site_dir, monitor_dirs, regenerate)


