# Copyright 2014-2022 Free Software Foundation, Inc.
# This file is part of GNU Radio
#
# GNU Radio Companion is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# GNU Radio Companion is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

from __future__ import absolute_import, print_function

# Standard modules
import logging

from PyQt6.QtWidgets import QDockWidget, QVBoxLayout, QWidget

# Custom modules
from .. import base

# Logging
log = logging.getLogger(f"grc.application.{__name__}")


class WikiTab(QDockWidget, base.Component):
    def __init__(self):
        super(WikiTab, self).__init__()

        self.qsettings = self.app.qsettings

        self.setObjectName('wiki_tab')
        self.setWindowTitle('Wiki')

        self.setFloating(False)

        try:
            from PyQt6.QtWebEngineWidgets import QWebEngineView
        except ImportError:
            log.error("PyQt QWebEngine missing!")
            self.hide()
            return

        # GUI Widgets

        # Create the layout widget
        container = QWidget(self)
        container.setObjectName('wiki_tab::container')
        self._container = container

        layout = QVBoxLayout(container)
        layout.setObjectName('wiki_tab::layout')
        layout.setSpacing(0)
        layout.setContentsMargins(5, 0, 5, 5)
        self._text = QWebEngineView()
        self._text.setZoomFactor(0.5)
        layout.addWidget(self._text)
        self._layout = layout

        container.setLayout(layout)
        self.setWidget(container)

        # TODO: Move to the base controller and set actions as class attributes
        # Automatically create the actions, menus and toolbars.
        # Child controllers need to call the register functions to integrate into the mainwindow
        self.actions = {}
        self.menus = {}
        self.toolbars = {}
        self.createActions(self.actions)
        self.createMenus(self.actions, self.menus)
        self.createToolbars(self.actions, self.toolbars)
        self.connectSlots()

        # Register the dock widget through the AppController.
        # The AppController then tries to find a saved dock location from the preferences
        # before calling the MainWindow Controller to add the widget.
        self.app.registerDockWidget(self, location=self.settings.window.WIKI_TAB_DOCK_LOCATION)
        if not self.qsettings.value("appearance/display_wiki", False, type=bool):
            self.hide()

    def setURL(self, url):
        if not self.isHidden():
            self._text.load(url)
            self._text.show()

    # Actions

    def createActions(self, actions):
        pass

    def createMenus(self, actions, menus):
        pass

    def createToolbars(self, actions, toolbars):
        pass
