import logging
from gi.repository import GLib, Gst, cairo

from lib.config import Config

class VideoWarningOverlay(object):
	""" Displays a Warning-Overlay above the Video-Feed of another VideoDisplay """

	def __init__(self, drawing_area):
		self.log = logging.getLogger('VideoWarningOverlay')

		self.drawing_area = drawing_area
		self.drawing_area.connect("draw", self.draw_callback)

		self.text = None
		self.blink_state = False

		GLib.timeout_add_seconds(1, self.on_blink_callback)

	def on_blink_callback(self):
		self.blink_state = not self.blink_state
		self.drawing_area.queue_draw()
		return True

	def enable(self, text=None):
		self.text = text
		self.drawing_area.show()
		self.drawing_area.queue_draw()

	def set_text(self, text=None):
		self.text = text
		self.drawing_area.queue_draw()

	def disable(self):
		self.drawing_area.hide()
		self.drawing_area.queue_draw()

	def draw_callback(self, area, cr):
		w = self.drawing_area.get_allocated_width();
		h = self.drawing_area.get_allocated_height();

		self.log.debug('draw_callback: w/h=%u/%u, blink_state=%u', w, h, self.blink_state)

		if self.blink_state:
			cr.set_source_rgba(1.0, 0.0, 0.0, 0.8)
		else:
			cr.set_source_rgba(1.0, 0.5, 0.0, 0.8)

		cr.rectangle(0, 0, w, h)
		cr.fill()

		text = "Stream is Blanked"
		if self.text:
			text += ": "+self.text

		cr.set_font_size(h*0.75)
		xbearing, ybearing, txtwidth, txtheight, xadvance, yadvance = cr.text_extents(text)

		cr.move_to(w/2 - txtwidth/2, h*0.75)
		cr.set_source_rgba(1.0, 1.0, 1.0, 1.0)
		cr.show_text(text)