import inspect
import logging
import sys

from PySide6 import QtWebSockets
from PySide6.QtCore import QUrl
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QVBoxLayout


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Websocket Bug Test")
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)
        button = QPushButton("Websocket Open and Ping", self)
        button.clicked.connect(self.websocket_open)
        layout.addWidget(button)
        self.websocket_client: QtWebSockets.QWebSocket = QtWebSockets.QWebSocket(
            "", QtWebSockets.QWebSocketProtocol.Version.Version13, None)
        self.websocket_client.errorOccurred.connect(websocket_on_error)

    def websocket_open(self):
        valid = self.websocket_client.isValid()
        if not valid:
            self.websocket_client.open(QUrl('ws://localhost:8001/'))
        # nothing has happened yet, open will not start work before returning to the event loop
        self.websocket_client.ping()


def websocket_on_error(error):
    logging.debug(inspect.currentframe().f_code.co_name)
    logging.warning('websocket error code: {}'.format(error))


def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    logging.basicConfig(filename='./test.log', level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')
    main()
