#! /usr/bin/env python3
# -*- coding: utf-8 -*-

#	Copyright 2013, Marten de Vries
#
#	This file is part of OpenTeacher.
#
#	OpenTeacher is free software: you can redistribute it and/or modify
#	it under the terms of the GNU General Public License as published by
#	the Free Software Foundation, either version 3 of the License, or
#	(at your option) any later version.
#
#	OpenTeacher is distributed in the hope that it will be useful,
#	but WITHOUT ANY WARRANTY; without even the implied warranty of
#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#	GNU General Public License for more details.
#
#	You should have received a copy of the GNU General Public License
#	along with OpenTeacher.  If not, see <http://www.gnu.org/licenses/>.

class BackgroundImageGeneratorModule:
	def __init__(self, moduleManager, *args, **kwargs):
		super().__init__(*args, **kwargs)
		self._mm = moduleManager

		self.type = "backgroundImageGenerator"
		self.requires = (
			self._mm.mods(type="metadata"),
			self._mm.mods(type="ui"),
		)

	def generate(self):
		"""Generate the body background, which includes:
		    - a rounded lighter area, on which the content is shown
		    - the logo
		    - the application name

		"""
		#set some values
		width = 1000
		height = 5000
		sideMargin = 27
		topMargin = 64

		xRadius = 9
		yRadius = xRadius * 0.7
		topLineY = 94

		logoTopX = 6
		logoSize = 107

		textXStart = 124
		textYBaseline = 58

		#determine colors
		textColor = QtGui.QColor.fromHsv(self._hue, 119, 47)
		gradientTopColor = QtGui.QColor.fromHsv(self._hue, 7, 253)
		gradientBottomColor = QtGui.QColor.fromHsv(self._hue, 12, 243)

		#create image
		img = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
		img.fill(QtCore.Qt.transparent)

		gradient = QtGui.QLinearGradient(0, 0, 0, height)
		gradient.setColorAt(0, gradientTopColor)
		gradient.setColorAt(1, gradientBottomColor)

		font = QtGui.QFont("Verdana", 37)
		font.setWeight(55)
		font.setLetterSpacing(QtGui.QFont.PercentageSpacing, 95)

		smallFont = QtGui.QFont(font)
		smallFont.setPointSize(smallFont.pointSize() - 8)

		painter = QtGui.QPainter(img)
		painter.setPen(self.lineColor)
		painter.setBrush(gradient)
		painter.drawRoundedRect(
			sideMargin,
			topMargin,
			width - sideMargin * 2,
			height,
			xRadius,
			yRadius
		)
		painter.drawLine(
			sideMargin,
			topLineY,
			width - sideMargin,
			topLineY
		)
		painter.drawImage(
			QtCore.QPoint(logoTopX, 0),
			QtGui.QImage(self._logo).scaledToHeight(logoSize, QtCore.Qt.SmoothTransformation)
		)

		textPen = QtGui.QColor(textColor)
		textPen.setAlpha(200)
		painter.setPen(textPen)
		painter.setFont(font)
		textXPos = textXStart
		painter.drawText(textXPos, textYBaseline, "O")
		textXPos += QtGui.QFontMetrics(font).width("O")
		painter.setFont(smallFont)
		painter.drawText(textXPos, textYBaseline, "PEN")
		textXPos += QtGui.QFontMetrics(smallFont).width("PEN")
		painter.setFont(font)
		painter.drawText(textXPos, textYBaseline, "T")
		textXPos += QtGui.QFontMetrics(font).width("T")
		painter.setFont(smallFont)
		painter.drawText(textXPos, textYBaseline, "EACHER")
		painter.end()

		return img

	def enable(self):
		global QtCore, QtGui
		try:
			from PyQt5 import QtCore, QtGui
		except ImportError:
			return
		modules = next(iter(self._mm.mods(type="modules")))
		metadata = modules.default("active", type="metadata").metadata
		self._hue = metadata["mainColorHue"]
		self._logo = metadata["iconPath"]

		self.lineColor = QtGui.QColor.fromHsv(self._hue, 28, 186)

		self.active = True

	def disable(self):
		self.active = False

		del self._hue
		del self._logo
		del self.lineColor

def init(moduleManager):
	return BackgroundImageGeneratorModule(moduleManager)
