from maya import OpenMaya as om

from ngSkinTools2.api.pyside import QtCore, QtWidgets

openDialogs = []
messagesCallbacks = []

# main window will set itself here
promptsParent = None


def __baseMessageBox(message):
    msg = QtWidgets.QMessageBox(promptsParent)
    msg.setWindowTitle("ngSkinTools2")
    msg.setText(message)

    for i in messagesCallbacks:
        i(message)

    openDialogs.append(msg)
    return msg


def displayError(message):
    """
    displays error in script editor and in a dialog box
    """

    message = str(message)
    om.MGlobal.displayError('[ngSkinTools2] ' + message)

    msg = __baseMessageBox(message)
    msg.setIcon(QtWidgets.QMessageBox.Critical)
    msg.exec_()


def info(message):
    msg = __baseMessageBox(message)
    msg.setIcon(QtWidgets.QMessageBox.Information)
    msg.exec_()


def yesNo(message):
    msg = __baseMessageBox(message)
    msg.setIcon(QtWidgets.QMessageBox.Question)
    msg.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
    msg.setDefaultButton(QtWidgets.QMessageBox.Yes)
    return msg.exec_() == QtWidgets.QMessageBox.Yes


def closeAllAfterTimeout(timeout, result=0):
    def closeAll():
        while openDialogs:
            msg = openDialogs.pop()
            msg.done(result)

    QtCore.QTimer.singleShot(timeout, closeAll)
