#!/usr/bin/env python3

#
# Konstrukteur - Static website generator
# Copyright 2013 Sebastian Fastner
#

# Import standard libraries
import sys, os, logging

# Importing PKG Resources which is mainly required to be loaded before Pygments
# for omitting ugly side effect errors. Not required at all otherwise.
try:
	import pkg_resources
except ImportError:
	pass

# Version check
if sys.version_info[0] < 3:
	sys.stderr.write("Konstrukteur requires Python 3!\n")
	sys.exit(1)

# Include local Konstrukteur into Python library path
basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), os.pardir))
if os.path.exists(os.path.join(basedir, "konstrukteur")):
	sys.path.insert(0, basedir)

try:
	import jasy
except ImportError:
	sys.stderr.write("Konstrukteur requires jasy (pip install jasy)!\n")
	sys.exit(1)

# ===========================================================================
#   OPTIONS
# ===========================================================================

from jasy.core.Options import Options
import jasy.core.Console as Console

args = sys.argv[1:]
#if args and "jasyscript.py" in args[0]:
 #   args = args.pop(0)
	
options = Options()

options.add("verbose", short="v", help="Print more detailed status messages to stdout")
options.add("quiet", short="q", help="Don't print status messages to stdout")

options.add("regenerate", short="r", help="Wait for file changes in content directory and rebuild website")
#options.add("log", accept=str, help="Write debug messages to given logfile")

#options.add("file", accept=str, value="jasyscript.py", help="Use the given jasy script")
options.add("fast", short="f", help="Prevents repository updates")
options.add("stats", help="Show statistics after run")

options.add("version", short="V", help="Print version info only")
options.add("help", short="h", help="Shows available options")


try:
	options.parse(args)
except Exception as optionError:
	logging.basicConfig(format="%(message)s")
	Console.error(optionError)
	sys.exit(1)

# For simple version info we just leave here
if options.version:
	import konstrukteur
	print("Konstrukteur %s" % konstrukteur.__version__)
	sys.exit(0)



# ===========================================================================
#   PATHS
# ===========================================================================

# Keep reference to executed jasy command
command = os.path.abspath(sys.argv[0])



# ===========================================================================
#   MAIN ROUTINE
# ===========================================================================

from jasy import UserError
import jasy.core.Util

def init():
	pass


def displayHelp():
	print("\n%s" % Console.colorize(Console.colorize("Usage", "bold"), "underline"))
	print("  $ %s [<options ...>] [create [--name <project name>]]\n\n" % os.path.basename(sys.argv[0]))

	print(Console.colorize("Global options", "underline"))
	options.printOptions(indent=21)

	print("\n\n%s" % Console.colorize("Create new website project", "underline"))
	print("  $ %s create --name <project name>\n" % os.path.basename(sys.argv[0]))
	print("  --name <project name>:   %s" % Console.colorize("Set name of new website project", "magenta"))

	print("\n\n%s" % Console.colorize("Generate website", "underline"))
	print("  $ %s [--regenerate]\n" % os.path.basename(sys.argv[0]))
	print("  --regenerate %s:       %s" % (
		Console.colorize("[-r]", "grey"),
		Console.colorize("Wait for file changes in content directory and rebuild website", "magenta")
	))

	print("\n\n")


def main():

	try:
		if options.help:
			displayHelp()
			sys.exit(0)
			
		command = ["jasy"]
		for option in ["verbose", "quiet", "fast", "stats"]:
			if getattr(options, option):
				command.append("--%s" % option)

		runTask = ["build"]
		tasks = options.getTasks()

		if tasks:
			for task in tasks:
				if task["task"] == "create":
					runTask = ["create"]

					if not "origin" in task["params"]:
						runTask.append("--origin=%s" % "https://github.com/fastner/konstrukteur.git")
						runTask.append("--skeleton=%s" % "website")

					for param, value in task["params"].items():
						if not param == "regenerate":
							runTask.append("--%s=%s" % (param, value))

		if options.regenerate and runTask[0] == "build":
			runTask.append("--regenerate=true")

		command = command + runTask

		retVal = jasy.core.Util.executeCommand(command, wrapOutput = False)
		
		if retVal == 1:
			displayHelp()

		return retVal

	except UserError as errobj:
		Console.error("%s" % errobj)
		sys.exit(1)

	except KeyboardInterrupt:
		#Console.error("Jasy Stopped!")
		#sys.exit(2)
		sys.exit(0)



# ===========================================================================
#   START
# ===========================================================================

retVal = main()
sys.exit(retVal)