from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QFormLayout, QGroupBox, \
    QLineEdit, QLabel

from fpakman.util import util
from fpakman.util.cache import Cache

IGNORED_ATTRS = {'name', '__app__'}


class InfoDialog(QDialog):

    def __init__(self, app: dict, icon_cache: Cache, locale_keys: dict, screen_size: QSize()):
        super(InfoDialog, self).__init__()
        self.setWindowTitle(app['name'])
        self.screen_size = screen_size
        layout = QVBoxLayout()
        self.setLayout(layout)

        gbox_info = QGroupBox()
        gbox_info.setMaximumHeight(self.screen_size.height() - self.screen_size.height() * 0.1)
        gbox_info_layout = QFormLayout()
        gbox_info.setLayout(gbox_info_layout)

        layout.addWidget(gbox_info)

        icon_data = icon_cache.get(app['__app__'].model.base_data.icon_url)

        if icon_data and icon_data.get('icon'):
            self.setWindowIcon(icon_data.get('icon'))

        for attr in sorted(app.keys()):
            if attr not in IGNORED_ATTRS and app[attr]:
                val = app[attr]
                text = QLineEdit()
                text.setToolTip(val)

                if attr == 'license' and val.strip() == 'unset':
                    val = locale_keys['license.unset']

                if attr == 'description':
                    val = util.strip_html(val)
                    val = val[0:40] + '...'

                text.setText(val)
                text.setCursorPosition(0)
                text.setStyleSheet("width: 400px")
                text.setReadOnly(True)

                label = QLabel("{}: ".format(locale_keys.get(app['__app__'].model.get_type() + '.info.' + attr, attr)).capitalize())
                label.setStyleSheet("font-weight: bold")

                gbox_info_layout.addRow(label, text)

        self.adjustSize()
