import cv2
import pyqtgraph as pg
from matplotlib import cm
import numpy as np

class DataDisplay:

    def __init__(self, view_box, view, data_item, event_handler=None):
        self.view_box = view_box
        self.data_item = data_item
        self.view_box = view_box
        self.view = view
        self.view.setCentralItem(self.view_box)
        self.view_box.setAspectLocked(True)
        self.view_box.addItem(self.data_item)
        self.event_handler = event_handler

        self.mouseMovedSignal = pg.SignalProxy(self.view_box.scene().sigMouseMoved, rateLimit=60, slot=self.mouseMoved)
        self.mouseClickedSignal = pg.SignalProxy(self.view_box.scene().sigMouseClicked, rateLimit=60, slot=self.mouseClicked)

    def mouseClicked(self, evt):
        pos = evt[0].pos()
        if self.view_box.sceneBoundingRect().contains(pos):
            mousePoint = self.view_box.mapSceneToView(pos)
            if self.event_handler is not None:
                self.event_handler([mousePoint.x(), mousePoint.y()])
                print([mousePoint.x(), mousePoint.y()])

    def mouseMoved(self, evt):
        pos = evt[0]
        if self.view_box.sceneBoundingRect().contains(pos):
            mousePoint = self.view_box.mapSceneToView(pos)
            print([mousePoint.x(), mousePoint.y()])


    def draw(self, data, color_scale=255, size_scale=1 ):

        scale = [0, color_scale]
        output = data
        output = cv2.resize(output, (int(output.shape[1]/size_scale), int(output.shape[0]/size_scale)))
        output = cv2.transpose(output)
        self.data_item.setImage(output, autoLevels=False, levels=scale, autoDownsample=False)