#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2022
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  ___________________________________________________________________________
#
#  This module was originally developed as part of the IDAES PSE Framework
#
#  Institute for the Design of Advanced Energy Systems Process Systems
#  Engineering Framework (IDAES PSE Framework) Copyright (c) 2018-2019, by the
#  software owners: The Regents of the University of California, through
#  Lawrence Berkeley National Laboratory,  National Technology & Engineering
#  Solutions of Sandia, LLC, Carnegie Mellon University, West Virginia
#  University Research Corporation, et al. All rights reserved.
#
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

"""
Import PyQt5 if available, then try PyQt4, then, if all else fails, use some
dummy classes to allow some testing. If anything fails to import, the exception
is logged.  That should make it clear exacly what's missing, but it could be a
little annoying if you are using PyQt4 or don't need jupyter qtconsole.  In the
future, will probably cut PyQt4 support, so it will be less of an issue.
"""
__author__ = "John Eslick"

import logging
_log = logging.getLogger(__name__)


class DummyQtCore(object):
    """
    A dummy QtCore class to allow some testing without PyQt
    """
    class QModelIndex(object):
        pass
    class Qt(object):
        class DisplayRole(object):
            pass
        class EditRole(object):
            pass

class DummyQAbstractItemModel(object):
    """
    A dummy QAbstractItemModel class to allow some testing without PyQt
    """
    def __init__(*args, **kwargs):
        pass

class DummyQAbstractTableModel(object):
    """
    A dummy QAbstractTableModel class to allow some testing without PyQt
    """
    def __init__(*args, **kwargs):
        pass

qt_available = False
qt_import_errors = []

try:
    from PyQt5 import QtCore
except:
    qt_import_errors.append("Cannot import PyQt5.QtCore")
    try:
        from PyQt4 import QtCore
    except:
        qt_import_errors.append("Cannot import PyQt4.QtCore")
    else:
        try:
            from PyQt4.QtGui import (QAbstractItemView, QFileDialog, QMainWindow,
                                     QMessageBox, QMdiArea, QApplication,
                                     QTableWidgetItem, QColor, QAction,
                                     QStatusBar, QLineEdit, QItemEditorFactory,
                                     QItemEditorCreatorBase, QStyledItemDelegate,
                                     QItemDelegate, QComboBox)
            from PyQt4.QtCore import (QAbstractItemModel, QAbstractTableModel,
                                      QVariant)
            import PyQt4.QtCore as QtCore
            from PyQt4 import uic
            qt_available = True
        except:
            qt_import_errors.append("Cannot import PyQt4")
else:
    try:
        from PyQt5.QtWidgets import (QAbstractItemView, QFileDialog, QMainWindow,
                                     QMessageBox, QMdiArea, QApplication,
                                     QTableWidgetItem, QAction, QStatusBar,
                                     QLineEdit, QItemEditorFactory,
                                     QItemEditorCreatorBase, QStyledItemDelegate,
                                     QItemDelegate, QComboBox)
        from PyQt5.QtGui import QColor
        from PyQt5.QtCore import (QAbstractItemModel, QAbstractTableModel,
                                  QVariant)
        import PyQt5.QtCore as QtCore
        from PyQt5 import uic
        qt_available = True
    except:
        qt_import_errors.append("Cannot import PyQt5")

if not qt_available:
    QAbstractItemModel = DummyQAbstractItemModel
    QAbstractTableModel = DummyQAbstractTableModel
    QtCore = DummyQtCore
