# -*- coding: utf-8 -*-


from os.path import normpath, dirname, abspath, join
import json
import os
import subprocess
import sys

import ox
from oxtornado import actions

import item.api
import user.api
import annotation.api
import update
import utils

import logging
logger = logging.getLogger(__name__)

def win32_ui(type):
    base = normpath(dirname(dirname(dirname(abspath(__file__)))))
    cmd = [
        join('..', 'platform_win32', 'pythonw.exe'),
        join('oml', 'ui.py'), type
    ]
    return cmd

def selectFolder(data):
    '''
        returns {
            path
        }
    '''
    path = utils.ctl_output('ui', 'folder')
    if path == 'None':
        path = None
    return {
        'path': path
    }
actions.register(selectFolder, cache=False)


def selectFile(data):
    '''
        returns {
            path
        }
    '''
    path = utils.ctl_output('ui', 'file')
    if path == 'None':
        path = None
    return {
        'path': path
    }
actions.register(selectFile, cache=False)

def short_home(path):
    home = os.path.expanduser('~')
    if path and path.startswith(home):
        path = path.replace(home, '~')
    return path

def autocompleteFolder(data):
    '''
        takes {
            path
        }
        returns {
            items
        }
    '''
    path = data['path']
    path = os.path.expanduser(path)
    if os.path.isdir(path):
        if path.endswith('/') and path != '/':
            path = path[:-1]
        folder = path
        name = ''
    else:
        folder, name = os.path.split(path)
    if os.path.exists(folder):
        prefix, folders, files = next(os.walk(folder))
        folders = [os.path.join(prefix, f) for f in folders if (not name or f.startswith(name)) and not f.startswith('.')]
        if prefix == path:
            folders = [path] + folders
    else:
        folders = []
    folders = [short_home(f) for f in folders]
    return {
        'items': ox.sorted_strings(folders)
    }
actions.register(autocompleteFolder, cache=False)

def quit(data):
    '''
        takes {
        }
        returns {
        }
    '''
    import state
    state.main.stop()
    return {}
actions.register(quit, cache=False)

def logError(data):
    '''
        takes {
        }
        returns {
        }
    '''
    #logger.debug('frontend error %s', data)
    return {}
actions.register(logError, cache=False)