"""
Translating text
"""
import os

try:
    import state
except ImportError:
    from . import state


class translateClass:
    """
    This is used so that the translateText function can be used
    when we are in daemon mode and not using any QT functions.
    """
    # pylint: disable=old-style-class,too-few-public-methods
    def __init__(self, context, text):
        self.context = context
        self.text = text

    def arg(self, _):
        """Replace argument placeholders"""
        if '%' in self.text:
            # This doesn't actually do anything with the arguments
            # because we don't have a UI in which to display this information anyway.
            return translateClass(self.context, self.text.replace('%', '', 1))
        return self.text


def _translate(context, text, disambiguation=None, encoding=None, n=None):
    # pylint: disable=unused-argument
    return translateText(context, text, n)


def translateText(context, text, n=None):
    """Translate text in context"""
    try:
        enableGUI = state.enableGUI
    except AttributeError:  # inside the plugin
        enableGUI = True
    if enableGUI:
        try:
            from PyQt4 import QtCore, QtGui
        except Exception as err:
            print('PyBitmessage requires PyQt unless you want to run it as a daemon'
                  ' and interact with it using the API.'
                  ' You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download'
                  ' or by searching Google for \'PyQt Download\'.'
                  ' If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon')
            print('Error message:', err)
            os._exit(0)  # pylint: disable=protected-access
        if n is None:
            return QtGui.QApplication.translate(context, text)
        return QtGui.QApplication.translate(context, text, None, QtCore.QCoreApplication.CodecForTr, n)
    else:
        if '%' in text:
            return translateClass(context, text.replace('%', '', 1))
        return text