import cv2, numpy as np
# from utils import *
# import matplotlib.pylab as plt
import os
import uiautomator2 as u2


def cv_imread(file_path):
    cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)
    return cv_img


class UIMatcher:

    @staticmethod
    def RotateClockWise90(img):
        trans_img = cv2.transpose(img)
        new_img = cv2.flip(trans_img, 0)
        return new_img

    # @staticmethod
    def findpic(screen, template_paths=['img/tiaoguo.jpg']):
        # 返回相对坐标
        '''
        检测各种按钮(头像?)
        @return: 中心坐标lists, 对应的可信度list
        '''
        zhongxings = []
        max_vals = []
        # 增加判断screen方向
        if screen.shape[0] > screen.shape[1]:
            screen = UIMatcher.RotateClockWise90(screen)
        screen_show = screen.copy()
        # screen_show = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY)
        # plt.imshow(screen_show)
        # plt.show()
        for template_path in template_paths:
            template = cv_imread(template_path)
            # template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)cv_imread
            h, w = template.shape[:2]  # rows->h, cols->w
            res = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
            min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
            x = (max_loc[0] + w // 2) / screen.shape[1]
            y = (max_loc[1] + h // 2) / screen.shape[0]
            zhongxings.append([x, y])
            max_vals.append(max_val)
            # if max_val>0.8:
            #     cv2.rectangle(screen_show, (int(max_loc[0]), int(max_loc[1])), (int(max_loc[0]+w),int(max_loc[1]+h)), (0, 0, 255), 2)
            #     cv2.putText(screen_show,str(round(max_val, 3))+os.path.basename(template_path),(int(max_loc[0]), int(max_loc[1])-2),cv2.FONT_HERSHEY_SIMPLEX,0.3, (0, 0, 255),1)
        cv2.rectangle(screen, (0, 0), (10, 10), (0, 0, 255), 2)
        # plt.cla()
        # img4 = cv2.cvtColor(screen_show, cv2.COLOR_BGR2RGB)
        # plt.imshow(img4)
        # plt.pause(0.01)
        # if max_val>yuzhi:
        #     match_flag = 1
        # else:
        #     match_flag = 0
        # ax.hist(res.reshape(-1,1), 100, facecolor='b', alpha=0.5, label="rand_mat")
        # plt.show()
        return zhongxings, max_vals

    # @staticmethod
    # def find_gaoliang(screen):
    #     '''
    #     检测高亮位置(忽略了上板边,防止成就栏弹出遮挡)
    #     @return: 高亮中心相对坐标[x,y]
    #     '''
    #     if screen.shape[0] > screen.shape[1]:
    #         screen = UIMatcher.RotateClockWise90(screen)
    #     gray = cv2.cvtColor(screen, cv2.COLOR_RGB2GRAY)
    #     ret, binary = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)
    #     index_1 = np.mean(np.argwhere(binary[63:, :] == 255), axis=0).astype(int)
    #
    #     screen = cv2.cvtColor(binary, cv2.COLOR_GRAY2RGB)
    #     cv2.circle(screen, (index_1[1], index_1[0] + 63), 10, (255, 0, 0), -1)
    #
    #     plt.cla()
    #     plt.imshow(screen)
    #     plt.pause(0.01)
    #     print(len(np.argwhere(binary == 255)), len(np.argwhere(binary == 0)))
    #     return index_1[1] / screen.shape[1], (index_1[0] + 63) / screen.shape[0]

#
# d = u2.connect()
# screen = d.screenshot(format="opencv")
# # screen = cv_imread('test.jpg')
# UIMatcher.find_gaoliang(screen)
# plt.show()
