import logging

from PyQt4 import QtGui
from PyQt4 import QtCore

vpnlogger = logging.getLogger('leap.openvpn')


class LogPaneMixin(object):
    """
    a simple log pane
    that writes new lines as they come
    """
    EXCLUDES = ('MANAGEMENT',)

    def createLogBrowser(self):
        """
        creates Browser widget for displaying logs
        (in debug mode only).
        """
        self.loggerBox = QtGui.QGroupBox()
        logging_layout = QtGui.QVBoxLayout()
        self.logbrowser = QtGui.QTextBrowser()

        startStopButton = QtGui.QPushButton(self.tr("&Connect"))
        self.startStopButton = startStopButton

        logging_layout.addWidget(self.logbrowser)
        logging_layout.addWidget(self.startStopButton)
        self.loggerBox.setLayout(logging_layout)

        # status box

        self.statusBox = QtGui.QGroupBox()
        grid = QtGui.QGridLayout()

        self.updateTS = QtGui.QLabel('')
        self.status_label = QtGui.QLabel(self.tr('Disconnected'))
        self.ip_label = QtGui.QLabel('')
        self.remote_label = QtGui.QLabel('')
        self.remote_country = QtGui.QLabel('')

        tun_read_label = QtGui.QLabel("tun read")
        self.tun_read_bytes = QtGui.QLabel("0")
        tun_write_label = QtGui.QLabel("tun write")
        self.tun_write_bytes = QtGui.QLabel("0")

        grid.addWidget(self.updateTS, 0, 0)
        grid.addWidget(self.status_label, 0, 1)
        grid.addWidget(self.ip_label, 1, 0)
        grid.addWidget(self.remote_label, 1, 1)
        grid.addWidget(self.remote_country, 2, 1)
        grid.addWidget(tun_read_label, 3, 0)
        grid.addWidget(self.tun_read_bytes, 3, 1)
        grid.addWidget(tun_write_label, 4, 0)
        grid.addWidget(self.tun_write_bytes, 4, 1)

        self.statusBox.setLayout(grid)

    @QtCore.pyqtSlot(str)
    def onLoggerNewLine(self, line):
        """
        simple slot: writes new line to logger Pane.
        """
        msg = line[:-1]
        if self.debugmode and all(map(lambda w: w not in msg,
                                      LogPaneMixin.EXCLUDES)):
            self.logbrowser.append(msg)
            vpnlogger.info(msg)