import os
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QFrame, QHBoxLayout, QPushButton, QSizePolicy, QTextBrowser, QVBoxLayout, QWidget
from PyQt5.QtCore import QUrl

import nixview.constants as cnst

class HelpDialog(QDialog):
    
    def __init__(self, parent = None) -> None:
        super().__init__(parent=parent)
        
        self.setModal(True)
        self.setMinimumSize(500, 750)

        self.help = HelpBrowser()

        self.help._edit.historyChanged.connect(self._on_history_changed)
        
        self.back_btn = QPushButton(QIcon(os.path.join(cnst.ICONS_FOLDER, "back_btn")), "back")
        self.back_btn.setEnabled(False)
        self.back_btn.clicked.connect(self.help._edit.backward)
        self.home_btn = QPushButton(QIcon(os.path.join(cnst.ICONS_FOLDER, "home_btn")),"home")
        self.home_btn.clicked.connect(self.help._edit.home)
        self.fwd_btn = QPushButton(QIcon(os.path.join(cnst.ICONS_FOLDER, "fwd_btn")),"forward")
        self.fwd_btn.setEnabled(False)
        self.fwd_btn.clicked.connect(self.help._edit.forward)
        
        empty = QWidget()
        empty.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)

        hbox = QHBoxLayout()
        hbox.addWidget(self.back_btn)
        hbox.addWidget(self.home_btn)
        hbox.addWidget(self.fwd_btn)
        hbox.addWidget(empty)      
        
        bbox = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok)
        bbox.accepted.connect(self.accept)
        layout = QVBoxLayout()

        layout.addLayout(hbox)
        layout.addWidget(self.help)
        layout.addWidget(bbox)
        self.setLayout(layout)
        
    def _on_history_changed(self):
        self.back_btn.setEnabled(self.help._edit.isBackwardAvailable())
        self.fwd_btn.setEnabled(self.help._edit.isForwardAvailable())


class HelpBrowser(QWidget):
    def __init__(self, parent=None) -> None:
        super().__init__(parent=parent)
        self.setLayout(QVBoxLayout())

        doc_url = QUrl.fromLocalFile(cnst.DOCS_ROOT_FILE)
        self._edit = QTextBrowser()
        self._edit.setOpenLinks(True)
        self._edit.setOpenExternalLinks(True)
        self._edit.setSource(doc_url)
        self._edit.setEnabled(True)
        self._edit.setFrameShape(QFrame.NoFrame)

        self.layout().addWidget(self._edit)