#!/usr/bin/python3
import subprocess
import sys

from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton, QLabel, QMenuBar
from PyQt6.QtCore import QSettings
from python3_mos_pyqt_dialogs.pyqt6_dialogs_functions import alert

version = '1.0'


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.settings = QSettings()
        self.text = QTextEdit()
        self.btn_load = QPushButton("Прочитать конфиг")
        self.btn_save = QPushButton("Записать в конфиг")
        self.btn_load.clicked.connect(self.load)
        self.btn_save.clicked.connect(self.save)
        layout = QVBoxLayout()
        layout.addWidget(QLabel('Список сайтов'))
        layout.addWidget(self.text)
        layout.addWidget(self.btn_load)
        layout.addWidget(self.btn_save)
        self.setLayout(layout)

        menu_bar = QMenuBar()
        menu_file = menu_bar.addMenu('Файл')
        action_restore_network = menu_file.addAction('Восстановить сеть')
        action_restore_network.triggered.connect(self.restore_network)
        action_exit = menu_file.addAction('Выход')
        action_exit.triggered.connect(lambda: self.close())

        layout.setMenuBar(menu_bar)

        self.setWindowTitle(f'Настройки для mwts-browser {version}')
        self.setWindowIcon(QIcon.fromTheme('mwts-settings'))
        self.setMinimumWidth(400)

    def load(self):
        try:
            self.text.setText('\n'.join(self.settings.value("urls", "")))
        except Exception as e:
            alert(f'Возникла ошибка: {e}')

    def save(self):
        try:
            self.settings.setValue("urls", self.text.toPlainText().split('\n'))
        except Exception as e:
            alert(f'Возникла ошибка: {e}')
        else:
            alert('Конфиг успешно сохранён.')

    def restore_network(self):
        cmd = subprocess.run(
            ['pkexec', 'bash', '-c',
             'rm -rf /etc/nftables/mwts-armed-nftables.conf /etc/nftables.conf.d/mwts-nftables.conf ; '
             'systemctl restart nftables'],
            capture_output=True
        )
        if cmd.returncode == 0:
            alert('Настройки сети успешно восстановлены.')
        else:
            alert(f'При восстановлении настроек сети возникла ошибка: {cmd.stdout.decode()}\n'
                  f'Код ошибки: {cmd.returncode}')


app = QApplication(sys.argv)
app.setOrganizationName('MOS')
app.setApplicationName('mwts-browser')
w = Window()
w.show()
sys.exit(app.exec())
