from __future__ import absolute_import, unicode_literals
import getpass
import os
from prompt_toolkit import PromptSession
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.formatted_text import PygmentsTokens
from prompt_toolkit.styles import Style
from prompt_toolkit.completion import WordCompleter, ThreadedCompleter
from pytify.history import history

style = Style.from_dict({
    'username':  '#84bd00 italic',
    'at':        '#999999',
    'host':      '#84bd00',
    'separator': '#84bd00',
    'text':      '#e6e6e6',
    'arrow':     '#999999',
    'selectedtext': 'reverse underline',
    'toolbar': '#e6e6e6 bg:#262626',
})


def completer():
    s = set()

    history_strings = history().load_history_strings()

    for name in history_strings:
        s.add(name)

    return WordCompleter(list(s), ignore_case=True)


def get_bottom_toolbar(currentSong):
    def toolbar():
        return [
            ('class:toolbar', ' exit: ctrl+d | clear: ctrl+c | song: %s' % currentSong)
        ]

    return toolbar


def get_prompt():
    return [
        ('class:username',  getpass.getuser()),
        ('class:at',        '@'),
        ('class:host',      os.uname()[1]),
        ('class:seperator', ' - '),
        ('class:text',      'Search:'),
        ('class:arrow',     '\n> '),
    ]


def custom_prompt(currentSong): 
    
    session = PromptSession(
        message=get_prompt,
        history=history(),
        auto_suggest=AutoSuggestFromHistory(),
        enable_history_search=True,
        bottom_toolbar=get_bottom_toolbar(currentSong),
        completer=completer(),
        complete_while_typing=True,
        complete_in_thread=True,
        style=style
    )

    return session.prompt()