# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
from __future__ import annotations

from PySide6.QtCore import Slot
from PySide6.QtWidgets import QDialog
from PySide6.QtSerialPort import QSerialPort

from ui_settingsdialog import Ui_SettingsDialog


class Settings:
    def __init__(self):
        self.parity = QSerialPort.Parity.EvenParity
        self.baud = QSerialPort.BaudRate.Baud19200
        self.data_bits = QSerialPort.DataBits.Data8
        self.stop_bits = QSerialPort.StopBits.OneStop
        self.response_time = 1000
        self.number_of_retries = 3


class SettingsDialog(QDialog):

    def __init__(self, parent):
        super().__init__(parent)
        self.m_settings = Settings()
        self.ui = Ui_SettingsDialog()
        self.ui.setupUi(self)

        self.ui.parityCombo.setCurrentIndex(1)
        self.ui.baudCombo.setCurrentText(f"{self.m_settings.baud}")
        self.ui.dataBitsCombo.setCurrentText(f"{self.m_settings.data_bits}")
        self.ui.stopBitsCombo.setCurrentText(f"{self.m_settings.stop_bits}")
        self.ui.timeoutSpinner.setValue(self.m_settings.response_time)
        self.ui.retriesSpinner.setValue(self.m_settings.number_of_retries)

        self.ui.applyButton.clicked.connect(self._apply)

    @Slot()
    def _apply(self):
        self.m_settings.parity = self.ui.parityCombo.currentIndex()
        if self.m_settings.parity > 0:
            self.m_settings.parity = self.m_settings.parity + 1
        self.m_settings.baud = int(self.ui.baudCombo.currentText())
        self.m_settings.data_bits = int(self.ui.dataBitsCombo.currentText())
        self.m_settings.stop_bits = int(self.ui.stopBitsCombo.currentText())
        self.m_settings.response_time = self.ui.timeoutSpinner.value()
        self.m_settings.number_of_retries = self.ui.retriesSpinner.value()

        self.hide()

    def settings(self):
        return self.m_settings
