import sys

if sys.version_info < (3, 7):
    HAS_IMPORTLIB_RESOURCE = False
    from pkg_resources import resource_filename
else:
    HAS_IMPORTLIB_RESOURCE = True
    from importlib.resources import path

from ..Qt import QtGui, QtWidgets


def make_action_icons(widget):
    global HAS_IMPORTLIB_RESOURCE
    icon_type = QtWidgets.QApplication.instance().theme
    from json import loads

    if HAS_IMPORTLIB_RESOURCE:
        with path('resources.icons', 'icons.json') as fp:
            with fp.open('r') as f:
                icon_list = loads(f.read())

        for ac, img in icon_list[widget.objectName()].items():
            dirname = 'resources.icons.%s_light' % icon_type
            with path(dirname, img+'.png') as imgpath:
                icon = QtGui.QIcon()
                icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
                getattr(widget, ac).setIcon(icon)

    else:
        with open(resource_filename('resources.icons', 'icons.json'), 'r') as f:
            icon_list = loads(f.read())

        for ac, img in icon_list[widget.objectName()].items():
            dirname = 'resources.icons.%s_light' % icon_type
            imgpath = resource_filename(dirname, img+'.png')
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            getattr(widget, ac).setIcon(icon)


def get_icon(icon_name):
    try:
        icon_type = QtWidgets.QApplication.instance().theme
    except AttributeError:
        icon_type = 'normal'

    global HAS_IMPORTLIB_RESOURCE

    if icon_name != 'logo':
        dirname = f'resources.icons.{icon_type}_light'
    else:
        dirname = 'resources.icons'

    if HAS_IMPORTLIB_RESOURCE:
        with path(dirname, icon_name+'.png') as imgpath:
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off)

            return icon
    else:
        imgpath = resource_filename(dirname, icon_name+'.png')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(imgpath), QtGui.QIcon.Normal, QtGui.QIcon.Off)

        return icon
