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

import sys
import os
import argparse
import logging

from embellish import engine, server, __version__

usage = '''
=======================================================
EMBELLISH %s: a low friction static website generator.
======================================================= 
Looks for markdown files (*markdown, *mkd, *md, *txt) and
converts them into HTML pages using HAML/jinja2
templates (*haml) with a little SASS and HAML processing.
''' % __version__

logging.basicConfig(level=logging.INFO)

print(usage)

parser = argparse.ArgumentParser()
parser.add_argument(
  'target', 
  help='web directory of source and output, or a site.yaml configuration file')
parser.add_argument(
  '--monitor', '-m', action="store_true",
  help='triggers a local web-server that monitors the'
  ' contents directory')
parser.add_argument(
  '--recursive', '-r', action="store_true",
  help='looks only in the directory specified')
args = parser.parse_args()

if os.path.isfile(args.target):
  site = engine.read_config_yaml(args.target)
  config_dir = os.path.dirname(args.target)
elif os.path.isdir(args.target):
  os.chdir(args.target)
  site = engine.default_site
  config_dir = args.target
else:
  logging.error('can\'t figure out {0}.'.format(args.target))
  sys.exit(1)

if args.recursive:
  site['recursive'] = True

engine.generate_site_incrementally(site)

if args.monitor:
  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)


