#!/usr/bin/python
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
# GPL 2012

import os
import sys
from optparse import OptionParser

import json

root = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..')
if os.path.exists(os.path.join(root, 'pandora_client')):
    sys.path.insert(0, root)


import pandora_client

if __name__ == '__main__':
    usage = "usage: %prog [options] action"
    parser = OptionParser(usage=usage)
    parser.add_option('-v', '--version', dest='version', action="store_true")
    parser.add_option('-c', '--config', dest='config',
        help='config.json containing config', default='~/.ox/client.json', type='string')
    parser.add_option('-d', '--debug', dest='debug',
        help='output debug information', action="store_true")
    (opts, args) = parser.parse_args()

    if opts.version:
        print "%s %s" % (os.path.basename(sys.argv[0]), pandora_client.__version__)
        sys.exit(0)
    opts.config = os.path.expanduser(opts.config)
    if (args and args[0] not in ('config', 'client') and not os.path.exists(opts.config)):
        print 'no configuration found, run "%s config" or specify one with -c' % sys.argv[0]
        sys.exit(1)

    if None in (opts.config, ):
        parser.print_help()
        sys.exit(1)

    actions = ('scan', 'sync', 'upload', 'upload_frames', 'extract', 'clean', 'cmd', 'import_srt', 'upload_document', 'install_programs')
    config = ('config', 'add_volume')
    server = ('server', 'client')
    if not args or args[0] not in actions + config + server:
        parser.error('''you must specify a valid action.
\t\tknown actions are: %s
\t\tconfiguration:     config, add_volume
\t\tdistributed encoding: server, client
for more information visit https://wiki.0x2620.org/wiki/pandora_client''' % ', '.join(actions))

    action = args[0]

    offline = action in config or action == 'client' or \
        (action == 'extract' and len(args) == 2 and args[1] in ('offline', 'all'))
    if action == 'client':
        opts.config = {'url': '', 'cache': '~/.ox/client.sqlite', 'media-cache': '~/.ox/media'}
    if action == 'config':
        if not os.path.exists(opts.config):
            with open(opts.config, 'w') as f:
                json.dump({
                  "url": "",
                  "username": "", 
                  "password": "", 
                  "cache": "~/.ox/client.sqlite", 
                  "media-cache": '~/.ox/media',
                  "volumes": {}
                }, f, indent=2)
    pandora_client.DEBUG = opts.debug
    c = pandora_client.Client(opts.config, offline)
    args = [a.decode('utf-8') if isinstance(a, str) else a for a in args[1:]]
    getattr(c, action)(args)

