#!/usr/bin/env python
# coding: utf-8
import sys
import os
import leselys
import ConfigParser

from docopt import docopt
from leselys import core
from leselys import accounts

from leselys.config import get_config
from leselys.backends import _load_backend

doc = """Leselys is a Web Interface for Leselys.

Usage:
  leselys serve --config=<path> [--host=<address>] [--port=<port>] [--debug]
  leselys (adduser|deluser|passwd) --config=<path>
  leselys init --config=<path>
  leselys -h | --help
  leselys -v | --version

Options:
  --host=<address>    Address to bind webserver on [default: 127.0.0.1]
  --port=<port>       Port to listen for webserver [default: 5000]
  --config=<path>     Path to configuration file
  --debug             Enable Debug mode for Flask [default: false]
  -h --help           Show help
  -v --version        Show version

"""

if __name__ == '__main__':
    args = docopt(doc, version=leselys.__version__)

    config_path = args.get('--config')
    if args.get('init'):
        if not os.path.exists(config_path):
            with open(args.get('--config'), 'w') as config:
                config_default = """[webserver]
host = 0.0.0.0
port = 5000
debug = false

[backend]
type = sofart
path = /tmp/leselys.db
mode = multi"""
                config.write(config_default)
                print('Configuration file created.')
                sys.exit(0)
        else:
            print('Error: "%s" file already exists.' % config_path)
            sys.exit(1)

    config = ConfigParser.ConfigParser()

    if not os.path.exists(args.get('--config')):
        print('Error: "%s" file not exists.' % config_path)
        sys.exit(1)

    config.read(config_path)

    if args.get('serve'):
        # Defaults
        core.host = '127.0.0.1'
        core.port = 5000
        core.debug = False

        if config.has_section('webserver') and config.get('webserver', 'host'):
            core.host = config.get('webserver', 'host')
        if config.has_section('webserver') and config.get('webserver', 'port'):
            core.port = config.get('webserver', 'port')
        if config.has_section('webserver') and config.get('webserver', 'debug'):
            if config.get('webserver', 'debug') in ['True', 'true']:
                core.debug = True
            else:
                core.debug = False
        core.host = core.host or args.get('--host')
        core.port = core.port or args.get('--port')
        core.debug = core.debug or args.get('--debug')


    if not config.has_section('backend'):
        print('Missing backend section in configuration file')
        sys.exit(1)
    if not config.get('backend', 'type'):
        print('Missing type setting in backend section in configuration file')
        sys.exit(1)

    # Create backend
    backend_settings = {}
    for item in config.items('backend'):
        backend_settings[item[0]] = item[1]
    del backend_settings['type']

    backend_module = _load_backend(config.get('backend', 'type'))
    core.backend = backend_module
    core.backend_settings = backend_settings
    core.load_backend()

    if args.get('serve'):
        core.run()
    if args.get('adduser'):
        accounts.add_user(core.backend)
    if args.get('deluser'):
        accounts.del_user(core.backend)
    if args.get('passwd'):
        accounts.update_password(core.backend)
