import sys
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QTabWidget, QVBoxLayout, QWidget,
    QLineEdit, QToolBar, QAction, QInputDialog, QMessageBox, QPushButton, QHBoxLayout
)
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile, QWebEnginePage
from PyQt5.QtCore import QUrl


class BrowserTab(QWidget):
    def __init__(self, start_url="https://www.google.com", incognito=False, user_agent=None):
        super().__init__()
        self.layout = QVBoxLayout(self)

        # Навигационная панель внутри вкладки
        nav_bar = QHBoxLayout()
        self.back_btn = QPushButton("Назад")
        self.forward_btn = QPushButton("Вперед")
        self.reload_btn = QPushButton("Обновить")
        self.zoom_in_btn = QPushButton("Увеличить")
        self.zoom_out_btn = QPushButton("Уменьшить")
        nav_bar.addWidget(self.back_btn)
        nav_bar.addWidget(self.forward_btn)
        nav_bar.addWidget(self.reload_btn)
        nav_bar.addWidget(self.zoom_in_btn)
        nav_bar.addWidget(self.zoom_out_btn)

        self.layout.addLayout(nav_bar)

        # Поле ввода URL
        self.url_bar = QLineEdit()
        self.url_bar.returnPressed.connect(self.navigate_to_url)
        self.layout.addWidget(self.url_bar)

        # Веб-просмотр
        self.browser = QWebEngineView()
        self.layout.addWidget(self.browser)

        # Настройка профиля для инкогнито и user-agent
        if incognito:
            self.profile = QWebEngineProfile()
            self.profile.setOffTheRecord(True)
            self.page = QWebEnginePage(self.profile, self.browser)
            self.browser.setPage(self.page)
        else:
            self.profile = QWebEngineProfile.defaultProfile()
            self.page = self.browser.page()

        if user_agent:
            self.profile.setHttpUserAgent(user_agent)

        # Установка начального URL
        self.browser.setUrl(QUrl(start_url))

        # Подключение сигналов к кнопкам
        self.back_btn.clicked.connect(self.browser.back)
        self.forward_btn.clicked.connect(self.browser.forward)
        self.reload_btn.clicked.connect(self.browser.reload)
        self.zoom_in_btn.clicked.connect(self.zoom_in)
        self.zoom_out_btn.clicked.connect(self.zoom_out)
        self.browser.urlChanged.connect(self.update_url_bar)
        self.browser.titleChanged.connect(self.update_parent_title)

    def navigate_to_url(self):
        url = self.url_bar.text()
        if not url.startswith(("http://", "https://")):
            url = "http://" + url
        self.browser.setUrl(QUrl(url))

    def update_url_bar(self, q):
        self.url_bar.setText(q.toString())

    def update_parent_title(self, title):
        """Обновляет заголовок вкладки в основном окне."""
        parent = self.parent()
        while parent and not isinstance(parent, AdvancedBrowser):
            parent = parent.parent()
        if parent:
            index = parent.tab_widget.indexOf(self)
            if index != -1:
                parent.tab_widget.setTabText(index, title)

    def zoom_in(self):
        current = self.browser.zoomFactor()
        self.browser.setZoomFactor(current + 0.1)

    def zoom_out(self):
        current = self.browser.zoomFactor()
        self.browser.setZoomFactor(current - 0.1)


class AdvancedBrowser(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("LevBrowser")
        self.resize(1024, 768)

        # Создание вкладок
        self.tab_widget = QTabWidget()
        self.tab_widget.setTabsClosable(True)
        self.tab_widget.tabCloseRequested.connect(self.close_current_tab)
        self.setCentralWidget(self.tab_widget)

        # Создание панели инструментов
        nav_bar = QToolBar("Навигация")
        self.addToolBar(nav_bar)

        # Действия панели инструментов
        new_tab_action = QAction("Новая вкладка", self)
        new_tab_action.triggered.connect(self.add_new_tab)
        nav_bar.addAction(new_tab_action)

        change_ua_action = QAction("Сменить User-Agent", self)
        change_ua_action.triggered.connect(self.change_user_agent)
        nav_bar.addAction(change_ua_action)

        incognito_action = QAction("Инкогнито", self)
        incognito_action.triggered.connect(self.enable_incognito_mode)
        nav_bar.addAction(incognito_action)

        # Добавление первой вкладки
        self.add_new_tab()

    def add_new_tab(self, incognito=False, user_agent=None, start_url="https://www.google.com"):
        new_tab = BrowserTab(start_url, incognito, user_agent)
        index = self.tab_widget.addTab(new_tab, "Новая вкладка")
        self.tab_widget.setCurrentIndex(index)

    def close_current_tab(self, index):
        if self.tab_widget.count() < 2:
            # Если открыта только одна вкладка, подтвердите закрытие приложения
            reply = QMessageBox.question(
                self, 'Закрыть браузер',
                "Это последняя вкладка. Хотите закрыть браузер?",
                QMessageBox.Yes | QMessageBox.No, QMessageBox.No
            )
            if reply == QMessageBox.Yes:
                self.close()
        else:
            self.tab_widget.removeTab(index)

    def current_tab(self):
        return self.tab_widget.currentWidget()

    def change_user_agent(self):
        user_agent, ok = QInputDialog.getText(self, "Сменить User-Agent", "Введите новый User-Agent:")
        if ok and user_agent:
            self.add_new_tab(user_agent=user_agent)

    def enable_incognito_mode(self):
        self.add_new_tab(incognito=True)


def main():
    app = QApplication(sys.argv)
    app.setApplicationName("LevBrowser")
    browser = AdvancedBrowser()
    browser.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()  исправь инкогнито не работает, добавь строку levbrowser://flags/ там 2 флага Quic, Kyber