#!/usr/bin/env python

import os, sys, logging
import os.path as op
from optparse import OptionParser

from cyraxlib.core import Site
from cyraxlib.server import start_server


def main():
    usage = '%s [options] [source]' % sys.argv[0]
    parser = OptionParser(usage)

    parser.add_option('', '--log', default='-',
                      help='redirect log to this file (default: stdout)')
    parser.add_option('-q', '--quiet', default=False, action='store_true',
                      help='do not output information messages')
    parser.add_option('-v', '--verbose', default=False, action='store_true',
                      help='output more logs')

    parser.add_option('-w', '--webserve', default=False, action='store_true',
                      help='start local web server')
    parser.add_option('-a', '--address', default='127.0.0.1',
                      help='address to listen on (default: all interfaces)')
    parser.add_option('-p', '--port', default=8000, type='int',
                      help='port to listen on (default: 8000)')

    parser.add_option('-d', '--dest', default='',
        help='destination directory (default: _build in source dir)')

    opts, args = parser.parse_args()

    source = op.abspath(args and args[0] or '.')
    if not op.exists(op.join(source, 'settings.cfg')):
        print 'Error: no settings.cfg in current folder'
        print
        parser.print_help()
        sys.exit(0)
    dest = opts.dest and opts.dest or op.join(source, '_build')

    if opts.verbose:
        level = logging.DEBUG
    elif opts.quiet:
        level = logging.ERROR
    else:
        level = logging.INFO
    if opts.log == '-':
        logging.basicConfig(stream=sys.stdout, level=level)
    else:
        logging.basicConfig(filename=opts.log, level=level)

    if opts.webserve:
        start_server(opts.address, opts.port, source, dest)
    else:
        site = Site(source, dest)
        site.render()

if __name__ == '__main__':
    main()
