class SplashScreen(object):
    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)

        self.windowTitle = "3Di Modeller Interface - Powered by QGIS"

        self.app = QApplication.instance()
        self.QApp = QCoreApplication.instance()

        if self.QApp is None:
            self.QApp = QApplication(sys.argv)

        self.QApp.startingUp()
        self.QApp.processEvents()
        self.app.startDragTime()

        self.iface.initializationCompleted.connect(self.customization)
        qApp.processEvents()

        self.applyStyle()

    def initGui(self):
        QSettings().setValue("/qgis/hideSplash", True)
        qApp.processEvents()

        icon = QIcon(":/3Di_images/3Di_images/images/logo.png")
        self.app.setWindowIcon(icon)
        self.iface.mainWindow().setWindowIcon(icon)

        self.iface.mainWindow().setWindowTitle(self.windowTitle)

        qApp.processEvents()

        if not self.iface.mainWindow().isVisible():
            self.splash_pix = QPixmap(":/3Di_images/3Di_images/images/splash.png")
            self.splash = QSplashScreen(self.splash_pix, Qt.WindowStaysOnTopHint)
            self.splash = QSplashScreen(self.splash_pix)
            self.splash.setMask(self.splash_pix.mask())
            self.splash.show()
            qApp.processEvents()
        self.applyStyle()
        self.addHelpMenuItem()
        return

    def run(self):
        pass

    def unload(self):
        qApp.processEvents()
        self.iface.initializationCompleted.disconnect(self.customization)
        self.helpAction.deleteLater()
        return

    def customization(self):
        self.splash.finish(self.iface.mainWindow())
        self.iface.mainWindow().setWindowTitle(self.windowTitle)
        qApp.processEvents()
        self.applyStyle()

    def applyStyle(self):
        path = os.path.abspath(
            os.path.join(self.plugin_dir, "Modeler Interface", "stylesheet.qss")
        )
        watch.removePaths(watch.files())
        reload_style(path)

    @staticmethod
    def open3DiHelp(self):
        webbrowser.open_new("https://docs.3di.live")

    @staticmethod
    def about_3di_mi_dialog():
        dialog = About3DiMIDialog(iface.mainWindow())
        dialog.exec_()

    def find_3di_menu(self):
        for i, action in enumerate(self.iface.mainWindow().menuBar().actions()):
            if action.menu().objectName() == "m3Di":
                return action.menu()
        return None

    def addHelpMenuItem(self):
        menu = self.find_3di_menu()
        if not menu:
            menu = QMenu("&3Di", self.iface.mainWindow().menuBar())
            menu.setObjectName("m3Di")
            self.iface.mainWindow().menuBar().addMenu(menu)

        self.helpAction = QAction(
            QIcon(":/3Di_images/3Di_images/images/logo.png"),
            "Documentation",
            self.iface.mainWindow(),
        )
        self.helpAction.triggered.connect(self.open3DiHelp)
        self.helpAction.setWhatsThis("3Di Documentation")

        menu.addAction(self.helpAction)

        about_action = QAction(
            # QIcon(":/3Di_images/3Di_images/images/logo.png"),
            "About 3Di Modeller Interface",
            self.iface.mainWindow(),
        )
        about_action.triggered.connect(self.about_3di_mi_dialog)
        about_action.setWhatsThis("About 3Di Modeller Interface")

        menu.addAction(about_action)